Compare commits
127 Commits
Author | SHA1 | Date | |
---|---|---|---|
b411d9963f | |||
040ea3a030 | |||
c803d5fa41 | |||
89b122da16 | |||
12b9aa9f58 | |||
2591259b6f | |||
dcae05febe | |||
8ac538cc0e | |||
7334a55e1d | |||
8ec203c774 | |||
264586b6c3 | |||
2e67065bd9 | |||
1ede6ca979 | |||
8db2a163d4 | |||
8c1701b5af | |||
a5c9fa4dd7 | |||
5e1fa958fe | |||
84a816919f | |||
b552531179 | |||
d7c5923ca8 | |||
1fbe390e3e | |||
8025aca688 | |||
306c0ed771 | |||
1b835928d9 | |||
ad3b0fe9e4 | |||
c8330e5e86 | |||
a3008f75fe | |||
0070bf3d5d | |||
708590c85e | |||
b0835bc5a7 | |||
85f66f34d5 | |||
ca530927a7 | |||
c461ede7f1 | |||
2dbdb9c4c8 | |||
4a8effdfde | |||
263a874d76 | |||
ccf990b896 | |||
5a26295438 | |||
309de1fa7b | |||
323e995c10 | |||
b3a5f09040 | |||
ee67bb4ce2 | |||
08af9a9788 | |||
0348ef59a4 | |||
9c770034e7 | |||
cac7a678dd | |||
8da7e5072a | |||
cea1463506 | |||
42725ead9a | |||
bd0268505f | |||
876db618e0 | |||
3b37ee93a8 | |||
20d5374674 | |||
4da7f7f656 | |||
df0e3a0014 | |||
d23d5db024 | |||
beae20414c | |||
fbde72ecb8 | |||
46f6725d5f | |||
6813e58212 | |||
62bdca8c46 | |||
8f9680b946 | |||
b6c921d0a8 | |||
49df44d565 | |||
badad86be2 | |||
82503fa5c9 | |||
65add82338 | |||
051a6e57e9 | |||
d6d3e21484 | |||
056d43ea68 | |||
20303cbb4f | |||
bf1420d4b6 | |||
29b1abf0ca | |||
6be56b4cce | |||
9465b99c3f | |||
d5a9a53cd6 | |||
4f63f21906 | |||
4ae827bc47 | |||
da960fb5fc | |||
628a422717 | |||
b85f27177b | |||
a4b0815f42 | |||
c7dcde1d6e | |||
dc30bfd8f1 | |||
a5e57c63c3 | |||
537fa9d76d | |||
2dc6857104 | |||
9408661e06 | |||
5f1418ebc1 | |||
5b13a5616b | |||
1eff431dd6 | |||
2d79e0a541 | |||
4a5372aa9d | |||
f47656fd88 | |||
d7590a4589 | |||
1572c0277e | |||
7dbba04017 | |||
d5a9d98391 | |||
76e8687269 | |||
c3c97b251b | |||
056902c2cf | |||
fee0c5a333 | |||
3cd3469cb0 | |||
753debd849 | |||
0af23ddb31 | |||
f94e485267 | |||
0a0e9cc723 | |||
4b570f7995 | |||
8a5dcd0172 | |||
a4b18960f3 | |||
0a8f8d59b4 | |||
4d989b0e3e | |||
df90101e7f | |||
819d3e819c | |||
09f8882cb8 | |||
829f9b4721 | |||
2cc7825eb2 | |||
7e4d39175e | |||
6a4fba7f9a | |||
0190b45438 | |||
22f45183fd | |||
ef5df22a06 | |||
54d2f01f90 | |||
f4f42eea75 | |||
0b373cda0d | |||
7e71c486c1 | |||
465eb632df |
BIN
Graphisme/screenshots/bootnew.jpg
Normal file
BIN
Graphisme/screenshots/bootnew.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
1223
INFORMATIONS.md
1223
INFORMATIONS.md
File diff suppressed because it is too large
Load Diff
29
MAKEFILE
29
MAKEFILE
@ -1,9 +1,5 @@
|
||||
all:
|
||||
cd commande
|
||||
make
|
||||
cd ..
|
||||
|
||||
cd programs
|
||||
cd lib
|
||||
make
|
||||
cd ..
|
||||
|
||||
@ -11,31 +7,16 @@ all:
|
||||
make
|
||||
cd ..
|
||||
|
||||
cd contribs
|
||||
make
|
||||
cd ..
|
||||
|
||||
cd install
|
||||
make
|
||||
cd ..
|
||||
|
||||
copy:
|
||||
make all
|
||||
copy commande\*.exe ..\data
|
||||
copy programs\*.exe ..\data
|
||||
copy programs\*.rip ..\data
|
||||
copy noyau\*.sys ..\data
|
||||
rem copy noyau\*.bin ..\data
|
||||
copy contribs\*.exe ..\data
|
||||
copy install\*.com ..\
|
||||
make clean
|
||||
|
||||
|
||||
clean:
|
||||
cd commande
|
||||
make clean
|
||||
cd ..
|
||||
|
||||
cd programs
|
||||
cd lib
|
||||
make clean
|
||||
cd ..
|
||||
|
||||
@ -43,10 +24,6 @@ clean:
|
||||
make clean
|
||||
cd ..
|
||||
|
||||
cd contribs
|
||||
make clean
|
||||
cd ..
|
||||
|
||||
cd install
|
||||
make clean
|
||||
cd ..
|
||||
|
@ -1,6 +1,7 @@
|
||||

|
||||
|
||||
## Copies d'écran de COS2000
|
||||

|
||||

|
||||

|
||||

|
||||
|
@ -1,39 +1,20 @@
|
||||
.model tiny
|
||||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
org 0h
|
||||
|
||||
include ..\include\fat.h
|
||||
include ..\include\mem.h
|
||||
include ..\include\divers.h
|
||||
|
||||
start:
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
pop ds
|
||||
pop es
|
||||
pop fs
|
||||
pop gs
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
mov ah,3
|
||||
int 48h
|
||||
mov ax,0002
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,42
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset msg
|
||||
int 47h
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
|
||||
realstart:
|
||||
push offset msginit
|
||||
call [print]
|
||||
xor bp,bp
|
||||
mov dl,' '
|
||||
call setdelimiter0
|
||||
@ -43,42 +24,75 @@ replay:
|
||||
noret:
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,16
|
||||
mov di,offset dir
|
||||
int 48h
|
||||
mov si,di
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov si,offset prompt
|
||||
int 47h
|
||||
mov ah,16
|
||||
mov di,offset dir
|
||||
int 48h
|
||||
push offset prompt
|
||||
call [print]
|
||||
mov di,offset buffer
|
||||
waitchar:
|
||||
mov ax,0
|
||||
int 16h
|
||||
call convertfr
|
||||
cmp ah,59
|
||||
jne norr
|
||||
cmp bp,0
|
||||
je waitchar
|
||||
mov ah,13
|
||||
mov si,cs:[bp-8]
|
||||
int 47h
|
||||
push word ptr cs: [bp-8]
|
||||
call [print]
|
||||
push cs
|
||||
pop es
|
||||
pop es
|
||||
call copy0
|
||||
call getlength0
|
||||
add di,cx
|
||||
jmp waitchar
|
||||
norr:
|
||||
cmp al,0Dh
|
||||
cmp al,0dh ;entrée
|
||||
je entere
|
||||
cmp al,08h ;backspace
|
||||
je backspace
|
||||
cmp al,27 ;echap
|
||||
je escape
|
||||
cmp al,' '
|
||||
jb waitchar
|
||||
cmp di,offset buffer+256
|
||||
je waitchar
|
||||
mov [di],al
|
||||
inc di
|
||||
mov dl,al
|
||||
mov ah,7
|
||||
int 47h
|
||||
push ax
|
||||
call [showchar]
|
||||
jmp waitchar
|
||||
escape:
|
||||
cmp di,offset buffer
|
||||
je waitchar
|
||||
mov ah,24
|
||||
int 47h
|
||||
mov dx,offset buffer
|
||||
mov cx,di
|
||||
sub cx,dx
|
||||
js waitchar
|
||||
je waitchar
|
||||
sub bh,cl
|
||||
mov ah,25
|
||||
int 47h
|
||||
mov di,offset buffer
|
||||
mov byte ptr [di],0
|
||||
backspace:
|
||||
cmp di,offset buffer
|
||||
je waitchar
|
||||
mov ah,24
|
||||
int 47h
|
||||
dec bh
|
||||
mov ah,25
|
||||
int 47h
|
||||
push ' '
|
||||
call [showchar]
|
||||
mov ah,25
|
||||
int 47h
|
||||
dec di
|
||||
mov byte ptr [di],0
|
||||
jmp waitchar
|
||||
|
||||
entere:
|
||||
mov byte ptr [di],0
|
||||
mov si,offset buffer
|
||||
@ -101,13 +115,13 @@ tre:
|
||||
cmp di,0
|
||||
je error
|
||||
push cs
|
||||
pop es
|
||||
pop es
|
||||
call evalue0
|
||||
cmp dx,bp
|
||||
jb noadd
|
||||
mov bp,dx
|
||||
mov ax,bx
|
||||
noadd:
|
||||
noadd:
|
||||
call cmpstr0
|
||||
jne tre
|
||||
mov si,offset buffer
|
||||
@ -132,7 +146,7 @@ nopod:
|
||||
error:
|
||||
mov bp,ax
|
||||
push cs
|
||||
pop es
|
||||
pop es
|
||||
mov dl,'.'
|
||||
call searchchar0
|
||||
je noaddext
|
||||
@ -141,99 +155,64 @@ error:
|
||||
call concat0
|
||||
noaddext:
|
||||
mov si,offset buffer
|
||||
push cs
|
||||
mov ax,offset arrive
|
||||
push ax
|
||||
mov di,offset vga
|
||||
mov ah,40
|
||||
int 47h
|
||||
mov ax,9000h
|
||||
mov es,ax
|
||||
push ax
|
||||
mov di,0100h
|
||||
push di
|
||||
mov ah,4
|
||||
mov ah,18
|
||||
int 48h
|
||||
jc reallyerror
|
||||
push es
|
||||
push es
|
||||
push es
|
||||
pop ds
|
||||
pop fs
|
||||
pop gs
|
||||
push 7202h
|
||||
popf
|
||||
db 0CBh
|
||||
arrive:
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
pop ds
|
||||
pop es
|
||||
pop fs
|
||||
pop gs
|
||||
mov si,offset vga
|
||||
mov ah,41
|
||||
int 47h
|
||||
xor bp,bp
|
||||
jmp replay
|
||||
reallyerror:
|
||||
pop ax
|
||||
pop ax
|
||||
pop ax
|
||||
pop ax
|
||||
mov ah,13
|
||||
mov si,offset Error_Syntax
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,cs:[bp-8]
|
||||
int 47h
|
||||
push offset error_syntax
|
||||
call [print]
|
||||
push word ptr cs: [bp-8]
|
||||
call [print]
|
||||
jmp replay
|
||||
errorprec:
|
||||
mov ah,13
|
||||
mov si,offset derror
|
||||
int 47h
|
||||
push offset derror
|
||||
call [print]
|
||||
jmp replay
|
||||
|
||||
Code_Exit:
|
||||
|
||||
code_exit:
|
||||
pop ax
|
||||
db 0CBh
|
||||
|
||||
Code_Version:
|
||||
mov ah,13
|
||||
mov si,offset Version_Text
|
||||
int 47h
|
||||
retf
|
||||
|
||||
code_version:
|
||||
push offset version_text
|
||||
call [print]
|
||||
ret
|
||||
|
||||
Version_Text db 'Cos 2000 version 3.0.2Fr par Nico',0
|
||||
|
||||
Code_Cls:
|
||||
|
||||
version_text db 'Cos 2000 version 1.4Fr par \c04MrNop',0
|
||||
|
||||
code_cls:
|
||||
mov ah,2
|
||||
int 47h
|
||||
ret
|
||||
|
||||
Code_Reboot:
|
||||
push 0FFFFh
|
||||
|
||||
code_reboot:
|
||||
push 0ffffh
|
||||
push 00000h
|
||||
db 0CBH
|
||||
|
||||
Code_Command:
|
||||
retf
|
||||
|
||||
code_command:
|
||||
push offset def
|
||||
call [print]
|
||||
mov bx,offset commands
|
||||
showalls:
|
||||
mov si,[bx]
|
||||
add bx,8
|
||||
cmp si,0
|
||||
cmp word ptr [bx],0
|
||||
je endoff
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
push word ptr [bx+4]
|
||||
push word ptr [bx+6]
|
||||
push word ptr [bx]
|
||||
push offset commandes
|
||||
call [print]
|
||||
jmp showalls
|
||||
endoff:
|
||||
ret
|
||||
|
||||
Code_Mode:
|
||||
def db 'Liste des commandes internes\l\l',0
|
||||
commandes db '%0 \h10:\h12%0 \h70%0\l',0
|
||||
|
||||
code_mode:
|
||||
mov cx,0
|
||||
call gettypeditem0
|
||||
mov ah,0
|
||||
@ -244,206 +223,320 @@ Code_Mode:
|
||||
int 47h
|
||||
ret
|
||||
|
||||
present db 'Le volume insere est nomme ',0
|
||||
present2 db ', Numero de serie : ',0
|
||||
nomdisque db 13 dup (0)
|
||||
Code_Dir:
|
||||
mov si,offset present
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,11
|
||||
mov di,offset nomdisque
|
||||
int 48h
|
||||
mov si,di
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov si,offset present2
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,12
|
||||
int 48h
|
||||
mov ah,10
|
||||
mov cx,32
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
xor ebp,ebp
|
||||
mov di,offset bufferentry
|
||||
mov si,di
|
||||
mov ah,7
|
||||
int 48h
|
||||
jc nofiles
|
||||
code_dir:
|
||||
mov ah,12
|
||||
int 48h
|
||||
push edx
|
||||
mov ah,11
|
||||
mov di,offset nomdisque
|
||||
int 48h
|
||||
push di
|
||||
push offset present
|
||||
call [print]
|
||||
xor bp,bp
|
||||
mov di,offset bufferentry
|
||||
mov ah,7
|
||||
int 48h
|
||||
jc nofiles
|
||||
go:
|
||||
mov ah,46
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,44
|
||||
mov dx,[si+Entries.FileDateCrea]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,45
|
||||
mov dx,[si+Entries.FileTimeCrea]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,44
|
||||
mov dx,[si+Entries.FileDate]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,45
|
||||
mov dx,[si+Entries.FileTime]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,48
|
||||
mov edx,[si+Entries.FileSize]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,47
|
||||
mov dl,[si+Entries.FileAttr]
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
inc bp
|
||||
mov ah,8
|
||||
int 48h
|
||||
jnc go
|
||||
push word ptr [di+entries.fileattr]
|
||||
push dword ptr [di+entries.filesize]
|
||||
push word ptr [di+entries.filetime]
|
||||
push word ptr [di+entries.filedate]
|
||||
push word ptr [di+entries.filetimecrea]
|
||||
push word ptr [di+entries.filedatecrea]
|
||||
push di
|
||||
push offset line
|
||||
call [print]
|
||||
inc bp
|
||||
mov ah,8
|
||||
int 48h
|
||||
jnc go
|
||||
nofiles:
|
||||
mov edx,ebp
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,8
|
||||
int 47h
|
||||
mov si,offset filess
|
||||
mov ah,13
|
||||
int 47h
|
||||
ret
|
||||
bufferentry db 32 dup (0)
|
||||
filess db ' Fichier(s) au total',0
|
||||
push ebp
|
||||
push offset filess
|
||||
call [print]
|
||||
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
|
||||
filess db '\l\l\c02%u Fichier(s) au total\l',0
|
||||
|
||||
changing db 'Changement de repertoire vers ',0
|
||||
code_cd:
|
||||
mov cx,0
|
||||
mov cx,0
|
||||
call gettypeditem0
|
||||
push si
|
||||
mov si,offset changing
|
||||
mov ah,13
|
||||
int 47h
|
||||
pop si
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov si,di
|
||||
mov ah,13
|
||||
int 48h
|
||||
jnc okchange
|
||||
mov si,offset errorchanging
|
||||
mov ah,13
|
||||
int 47h
|
||||
push di
|
||||
push offset changing
|
||||
call [print]
|
||||
mov si,di
|
||||
mov ah,13
|
||||
int 48h
|
||||
jnc okchange
|
||||
push offset errorchanging
|
||||
call [print]
|
||||
okchange:
|
||||
ret
|
||||
errorchanging db 'Impossible d''atteindre ce dossier',0
|
||||
ret
|
||||
|
||||
changing db 'Changement de repertoire vers %0\l',0
|
||||
errorchanging db '\c04Impossible d''atteindre ce dossier',0
|
||||
|
||||
code_kill:
|
||||
mov cx,0
|
||||
call gettypeditem0
|
||||
push di
|
||||
push offset killing
|
||||
call [print]
|
||||
mov si,di
|
||||
mov ah,5
|
||||
int 49h
|
||||
jc nochanged
|
||||
mov ah,1
|
||||
int 49h
|
||||
jnc okchanged
|
||||
nochanged:
|
||||
push offset errorkilling
|
||||
call [print]
|
||||
okchanged:
|
||||
ret
|
||||
|
||||
killing db 'Fermeture du processus %0\l',0
|
||||
errorkilling db '\c04Impossible de fermer ce processus',0
|
||||
|
||||
code_refresh:
|
||||
mov ah,3
|
||||
int 48h
|
||||
jnc okrefresh
|
||||
mov si,offset errorrefreshing
|
||||
mov ah,13
|
||||
int 47h
|
||||
ret
|
||||
mov ah,3
|
||||
int 48h
|
||||
jnc okrefresh
|
||||
push offset errorrefreshing
|
||||
call [print]
|
||||
ret
|
||||
okrefresh:
|
||||
mov si,offset present
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,11
|
||||
mov di,offset nomdisque
|
||||
int 48h
|
||||
mov si,di
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov si,offset present2
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,12
|
||||
int 48h
|
||||
mov ah,10
|
||||
mov cx,32
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
ret
|
||||
errorrefreshing db 'Impossible de lire le support',0
|
||||
|
||||
extcom db '.EXE',0
|
||||
mov ah,12
|
||||
int 48h
|
||||
push edx
|
||||
mov ah,11
|
||||
mov di,offset nomdisque
|
||||
int 48h
|
||||
push di
|
||||
push offset present
|
||||
call [print]
|
||||
ret
|
||||
|
||||
commands dw Str_Exit ,Code_Exit ,Syn_Exit ,Help_Exit
|
||||
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 0
|
||||
|
||||
Str_Exit db 'QUIT',0
|
||||
Str_Version db 'VERS',0
|
||||
Str_Cls db 'EFFAC',0
|
||||
Str_Reboot db 'REDEM',0
|
||||
Str_Command db 'CMDS',0
|
||||
Str_Mode db 'MODE',0
|
||||
Str_Dir db 'VOIR',0
|
||||
Str_refresh db 'LIRE',0
|
||||
Str_cd db 'CH',0
|
||||
Syn_Exit db 0
|
||||
Syn_Version db 0
|
||||
Syn_Cls db 0
|
||||
Syn_Reboot db 0
|
||||
Syn_Command db 0
|
||||
Syn_Mode db 'FFH',0
|
||||
Syn_Dir db 0
|
||||
Syn_refresh db 0
|
||||
Syn_cd db '@',0
|
||||
Help_Exit db 0
|
||||
Help_Version db 0
|
||||
Help_Cls db 0
|
||||
Help_Reboot db 0
|
||||
Help_Command db 0
|
||||
Help_Mode db 0
|
||||
Help_Dir db 0
|
||||
Help_refresh db 0
|
||||
Help_cd db 0
|
||||
derror db 'Erreur de Syntaxe !',0
|
||||
Error_Syntax db 'La commande ou l''executable n''existe pas ! F1 pour ',0
|
||||
prompt db '>',0
|
||||
msg db 'Interpreteur de commande COS V1.1',0
|
||||
errorrefreshing db '\c04Impossible de lire le support',0
|
||||
extcom db '.CE',0
|
||||
|
||||
include str0.asm
|
||||
|
||||
dir equ $
|
||||
buffer equ $+128
|
||||
buffer2 equ $+128+512
|
||||
vga equ $+128+512+512
|
||||
code_mem:
|
||||
push offset msg
|
||||
call [print]
|
||||
xor ebx,ebx
|
||||
xor cx,cx
|
||||
listmcb:
|
||||
mov ah,4
|
||||
int 49h
|
||||
jc fino
|
||||
inc cx
|
||||
;placement mémoire
|
||||
mov dx,gs
|
||||
inc dx
|
||||
inc dx
|
||||
push edx
|
||||
;parent
|
||||
cmp gs: [mb.reference],0
|
||||
jne next
|
||||
push cs
|
||||
push offset none
|
||||
add bx,gs:[mb.sizes]
|
||||
jmp suitemn
|
||||
next:
|
||||
mov dx,gs: [mb.reference]
|
||||
dec dx
|
||||
dec dx
|
||||
push dx
|
||||
push offset mb.names
|
||||
suitemn:
|
||||
;Resident
|
||||
cmp gs: [mb.isresident],true
|
||||
jne notresident
|
||||
push offset resident
|
||||
jmp suitelistmcb
|
||||
notresident:
|
||||
push offset nonresident
|
||||
suitelistmcb:
|
||||
;taille memoire
|
||||
xor edx,edx
|
||||
mov dx,gs: [mb.sizes]
|
||||
shl edx,4
|
||||
push 6
|
||||
push edx
|
||||
;nom
|
||||
push gs
|
||||
push offset mb.names
|
||||
push offset line2
|
||||
call [print]
|
||||
jmp listmcb
|
||||
fino:
|
||||
shl ebx,4
|
||||
push ebx
|
||||
push offset fin
|
||||
call [print]
|
||||
ret
|
||||
resident db "oui",0
|
||||
nonresident db "non",0
|
||||
line2 db "%0P\h15%w\h24%0\h30%0P\h46%hW\l",0
|
||||
fin db "\l\l\c02%u octets de memoire disponible\l",0
|
||||
msg db "Plan de la memoire\l\lNom Taille Res Parent Mem\l",0
|
||||
none db ".",0
|
||||
|
||||
|
||||
end start
|
||||
;converti le jeux scancode/ascii en fr ax->ax
|
||||
convertfr:
|
||||
push dx si
|
||||
mov si,offset fr
|
||||
searchtouch:
|
||||
mov dx,cs: [si]
|
||||
cmp dx,0
|
||||
je endofconv
|
||||
add si,4
|
||||
cmp dx,ax
|
||||
jne searchtouch
|
||||
mov ax,cs: [si-2]
|
||||
endofconv:
|
||||
pop dx si
|
||||
ret
|
||||
|
||||
fr: db '1', 02, '&', 02
|
||||
db '!', 02, '1', 02
|
||||
db '2', 03, '‚', 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, 'Š', 08
|
||||
db '&', 08, '7', 08
|
||||
db '8', 09, '_', 09
|
||||
db '*', 09, '8', 09
|
||||
db '9', 10, '‡', 10
|
||||
db '(', 10, '9', 10
|
||||
db '0', 11, '…', 11
|
||||
db ')', 11, '0', 11
|
||||
db '-', 12, ')', 12
|
||||
db '_', 12, 'ø', 12
|
||||
db 'Q', 16, 'A', 16
|
||||
db 'q', 16, 'a', 16
|
||||
db 'W', 17, 'Z', 17
|
||||
db 'w', 17, 'z', 17
|
||||
db '{', 26, '‰', 26
|
||||
db '[', 26, 'ˆ', 26
|
||||
db ']', 27, '$', 27
|
||||
db '}', 27, 'œ', 27
|
||||
db 'A', 30, 'Q', 30
|
||||
db 'a', 30, 'q', 30
|
||||
db ':', 39, 'M', 39
|
||||
db ';', 39, 'm', 39
|
||||
db 39, 40, '—', 40
|
||||
db '"', 40, '%', 40
|
||||
db 00, 40, '%', 40
|
||||
db '\', 43, '*', 43
|
||||
db '|', 43, 'æ', 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, 'õ', 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
|
||||
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 0
|
||||
|
||||
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
|
||||
str_kill db 'KILL',0
|
||||
|
||||
syn_exit db 0
|
||||
syn_version db 0
|
||||
syn_cls db 0
|
||||
syn_reboot db 0
|
||||
syn_command db 0
|
||||
syn_mode db 'FFH',0
|
||||
syn_dir db 0
|
||||
syn_refresh db 0
|
||||
syn_cd db '@',0
|
||||
syn_mem db 0
|
||||
syn_kill db '@',0
|
||||
|
||||
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
|
||||
|
||||
derror db '\c04Erreur de Syntaxe !',0
|
||||
error_syntax db '\c04La commande ou l''executable n''existe pas ! F1 pour ',0
|
||||
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
|
||||
|
||||
include str0.asm
|
||||
|
||||
dir db 32 dup (0)
|
||||
buffer db 128 dup (0)
|
||||
buffer2 db 128 dup (0)
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
db "VIDEO.LIB::showhex",0
|
||||
showhex dd 0
|
||||
db "VIDEO.LIB::showchar",0
|
||||
showchar dd 0
|
||||
dw 0
|
||||
|
||||
end start
|
||||
|
@ -2,15 +2,15 @@ lnk_boot = tlink /x
|
||||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
|
||||
all: ex-tasm.exe ex-nasm.exe
|
||||
all: ex-tasm.com ex-nasm.com
|
||||
|
||||
ex-tasm.exe: ex-tasm.asm
|
||||
ex-tasm.com: ex-tasm.asm
|
||||
$(asm) ex-tasm
|
||||
$(lnk) ex-tasm
|
||||
ren ex-tasm.com ex-tasm.exe
|
||||
ren ex-tasm.com ex-tasm.com
|
||||
|
||||
ex-nasm.exe: ex-nasm.asm
|
||||
nasm ex-nasm.asm -o ex-nasm.exe
|
||||
ex-nasm.com: ex-nasm.asm
|
||||
nasm ex-nasm.asm -o ex-nasm.com
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
|
BIN
doc_origine.pdf
Normal file
BIN
doc_origine.pdf
Normal file
Binary file not shown.
20
include/cpu.h
Normal file
20
include/cpu.h
Normal file
@ -0,0 +1,20 @@
|
||||
struc cpu
|
||||
vendor db 13 dup(0) ;Chaine 0 du fabriquant
|
||||
names db 32 dup(0)
|
||||
stepping db 0
|
||||
models db 0
|
||||
family db 0
|
||||
types db 0
|
||||
emodels db 0
|
||||
efamily db 0
|
||||
mmx db 0
|
||||
mmx2 db 0
|
||||
sse db 0
|
||||
sse2 db 0
|
||||
sse3 db 0
|
||||
fpu db 0
|
||||
now3d db 0
|
||||
now3d2 db 0
|
||||
htt db 0
|
||||
apic db 0
|
||||
ends cpu
|
2
include/divers.h
Normal file
2
include/divers.h
Normal file
@ -0,0 +1,2 @@
|
||||
true equ 1
|
||||
false equ 0
|
106
include/fat.h
106
include/fat.h
@ -1,58 +1,52 @@
|
||||
Free equ 0
|
||||
True equ 1
|
||||
False equ 0
|
||||
struc dpt
|
||||
steprate&headunload db 0DFh ;Vitesse de progression & mont‚e de la tˆte
|
||||
dmaflag&headload db 002h ;Etat Dma et temps de descente de la tˆte
|
||||
delaymotoroff db 025h ;Temps avant extinction moteur
|
||||
bytepersector db 002h ;Taille des secteurs
|
||||
sectorpertracks db 000h ;Nombre de secteur par piste
|
||||
intersectgaplength db 01Bh ;Taille du GAP3 en lecture/‚criture
|
||||
datalength db 0FFh ;Longueur du transfert de donn‚es
|
||||
intersectgaplengthf db 054h ;Taille du GAP3 en formatage
|
||||
formatbyte db 0F6h ;Octet de formatage
|
||||
headsettlingtime db 000h ;Temps de repos des tˆtes
|
||||
delaymotornormspeed db 008h ;Temps de mont‚e en vitesse du moteur
|
||||
ends dpt
|
||||
|
||||
DPT struc
|
||||
StepRate&HeadUnload db 0DFh ;Vitesse de progression & mont‚e de la tˆte
|
||||
DMAFlag&HeadLoad db 002h ;Etat Dma et temps de descente de la tˆte
|
||||
DelayMotorOff db 025h ;Temps avant extinction moteur
|
||||
BytePerSector db 002h ;Taille des secteurs
|
||||
SectorPerTracks db 000h ;Nombre de secteur par piste
|
||||
InterSectGapLength db 01Bh ;Taille du GAP3 en lecture/‚criture
|
||||
DataLength db 0FFh ;Longueur du transfert de donn‚es
|
||||
InterSectGapLengthF db 054h ;Taille du GAP3 en formatage
|
||||
FormatByte db 0F6h ;Octet de formatage
|
||||
HeadSettlingTime db 000h ;Temps de repos des tˆtes
|
||||
DelayMotorNormSpeed db 008h ;Temps de mont‚e en vitesse du moteur
|
||||
DPT ends
|
||||
struc entries
|
||||
filename db 8 dup (0)
|
||||
filext db 3 dup (0)
|
||||
fileattr db 0
|
||||
filereserved db 0
|
||||
filetimecreams db 0 ;(*10 ms)
|
||||
filetimecrea dw 0
|
||||
filedatecrea dw 0
|
||||
filedateacc dw 0
|
||||
filenotused dw 0
|
||||
filetime dw 0
|
||||
filedate dw 0
|
||||
filegroup dw 0
|
||||
filesize dd 0
|
||||
ends entries
|
||||
|
||||
Entries Struc
|
||||
FileName db 8 dup (0)
|
||||
FilExt db 3 dup (0)
|
||||
FileAttr db 0
|
||||
FileReserved db 0
|
||||
FileTimeCreaMs db 0 ;(*10 ms)
|
||||
FileTimeCrea dw 0
|
||||
FileDateCrea dw 0
|
||||
FileDateAcc dw 0
|
||||
FileNotused dw 0
|
||||
FileTime dw 0
|
||||
FileDate dw 0
|
||||
FileGroup dw 0
|
||||
FileSize dd 0
|
||||
Entries Ends
|
||||
|
||||
BootSector Struc
|
||||
jumper db 0,0,0
|
||||
Vendor db 'COS2000A' ;Fabricant + n°série Formatage
|
||||
SectorSize dw 512 ;octet/secteur
|
||||
SectorsPerCluster db 1 ;secteur/cluster
|
||||
ReservedSectors dw 1 ;secteur reserv‚
|
||||
FatsPerDrive db 2 ;nb de copie de la FAT
|
||||
DirectorySize dw 224 ;taille rep racine
|
||||
SectorsPerDrive dw 2880 ;nb secteur du volume si < 32 még
|
||||
MédiaDescriptor db 0F0h ;Descripteur de média
|
||||
SectorsPerFat dw 9 ;secteur/FAT
|
||||
SectorsPerTrack dw 18 ;secteur/piste
|
||||
HeadsPerDrive dw 2 ;nb de tˆteb de lecture/écriture
|
||||
HiddenSectorsH dw 0 ;nombre de secteur cach‚s
|
||||
HiddenSectorsL dw 0 ;
|
||||
SectorPerDisk2 dd 0 ;Nombre secteur du volume si > 32 Mo+20h ; the number of sectors
|
||||
BootDrive db 0 ;Lecteur de d‚marrage
|
||||
ReservedForNT db 0 ;NA
|
||||
BootSign db 29h ;boot signature 29h
|
||||
SerialNumber dd 01020304h ;no de serie
|
||||
DriveName db 'COS2000 ' ;nom de volume
|
||||
TypeOffAt db 'FAT16 ' ;FAT
|
||||
bootcode db 453 dup (0)
|
||||
BootSector ends
|
||||
struc bootinfo
|
||||
vendor db 'COS2000A' ;Fabricant + n°série Formatage
|
||||
sectorsize dw 512 ;octet/secteur
|
||||
sectorspercluster db 1 ;secteur/cluster
|
||||
reservedsectors dw 1 ;secteur reserv‚
|
||||
fatsperdrive db 2 ;nb de copie de la FAT
|
||||
directorysize dw 224 ;taille rep racine
|
||||
sectorsperdrive dw 2880 ;nb secteur du volume si < 32 még
|
||||
mediadescriptor db 0F0h ;Descripteur de média
|
||||
sectorsperfat dw 9 ;secteur/FAT
|
||||
sectorspertrack dw 18 ;secteur/piste
|
||||
headsperdrive dw 2 ;nb de tˆteb de lecture/écriture
|
||||
hiddensectorsh dw 0 ;nombre de secteur cach‚s
|
||||
hiddensectorsl dw 0 ;
|
||||
sectorperdisk2 dd 0 ;Nombre secteur du volume si > 32 Mo+20h ; the number of sectors
|
||||
bootdrive db 0 ;Lecteur de d‚marrage
|
||||
reservedfornt db 0 ;NA
|
||||
bootsign db 29h ;boot signature 29h
|
||||
serialnumber dd 01020304h ;no de serie
|
||||
drivename db 'COS2000 ' ;nom de volume
|
||||
typeoffat db 'FAT16 ' ;FAT
|
||||
ends bootinfo
|
||||
|
4
include/graphic.h
Normal file
4
include/graphic.h
Normal file
@ -0,0 +1,4 @@
|
||||
struc point
|
||||
coordx db 0
|
||||
coordy db 0
|
||||
ends point
|
32
include/mem.h
Normal file
32
include/mem.h
Normal file
@ -0,0 +1,32 @@
|
||||
struc mb ;Bloc de mémoire
|
||||
check db "NH" ;signature du bloc de mémoire
|
||||
isnotlast db 0 ;flag indiquant le dernier bloc
|
||||
isresident db 0 ;flag indiquant que le bloc est resident
|
||||
reference dw 0 ;pointeur vers le bloc parent
|
||||
sizes dw 0 ;taille du bloc en paragraphe de 16 octet
|
||||
names db 24 dup (0) ;nom du bloc
|
||||
ends mb
|
||||
|
||||
struc exe ;Executable COS
|
||||
checks db "CE" ;signature de l'exe
|
||||
major db 1 ;N° version
|
||||
checksum dd 0 ;Checksum de l'exe
|
||||
compressed db 0 ;a 1 si compressé par RLE
|
||||
exports dw 0 ;importation de fonctions
|
||||
imports dw 0 ;exportation de fonctions
|
||||
sections dw 0 ;sections des blocs mémoire
|
||||
starting dw 15
|
||||
ends exe
|
||||
|
||||
struc descriptor
|
||||
limit_low dw 0
|
||||
base_low dw 0
|
||||
base_middle db 0
|
||||
dpltype db 0
|
||||
limit_high db 0
|
||||
base_high db 0
|
||||
ends descriptor
|
||||
|
||||
|
||||
free equ 0 ;Reference quand libre
|
||||
memorystart equ 0052h ;premier bloc de la mémoire
|
@ -1,4 +1,4 @@
|
||||
pci Struc
|
||||
struc pcidata
|
||||
vendor dw 0 ;vendor ID (read-only), FFFFh returned if requested device non-existent
|
||||
device dw 0 ;device ID (read-only)
|
||||
command dw 0 ;command register
|
||||
@ -6,7 +6,7 @@ status dw 0 ;status register
|
||||
revision db 0 ;revision ID
|
||||
interface db 0 ;programming interface
|
||||
subclass db 0 ;sub-class
|
||||
class db 0 ;class code
|
||||
class db 0 ;class code
|
||||
cache db 0 ;cache line size
|
||||
timer db 0 ;latency timer
|
||||
typed db 0 ;header type
|
||||
@ -16,4 +16,19 @@ typed db 0 ;header type
|
||||
;02h PCI-to-CardBus bridge
|
||||
;bit 7: multi-function device
|
||||
result db 0 ;Built-In Self-Test result
|
||||
pci Ends
|
||||
ends pcidata
|
||||
|
||||
struc pciinf
|
||||
version_major db 0
|
||||
version_minor db 0
|
||||
types db 0
|
||||
maxbus db 0
|
||||
ends pciinf
|
||||
|
||||
multifunction equ 80h
|
||||
othercard equ 00h
|
||||
pci2pcibridge equ 01h
|
||||
pci2pcicard equ 02h
|
||||
|
||||
config1addr equ 0CF8h
|
||||
config1data equ 0CFCh
|
||||
|
@ -1,16 +1,20 @@
|
||||
lnk_boot = tlink /x
|
||||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
asm= lzasm
|
||||
lnk= elink
|
||||
|
||||
all: setup.com
|
||||
|
||||
setup.com: setup.asm
|
||||
$(asm) setup
|
||||
$(lnk) setup
|
||||
setup.com: setup.obj
|
||||
$(lnk) setup.obj setup.com
|
||||
|
||||
setup.obj:
|
||||
$(asm) setup.asm
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.bak
|
||||
del *.lib
|
||||
del *.com
|
||||
del *.bin
|
||||
del *.sys
|
||||
del *.err
|
||||
del *.err
|
@ -1,26 +1,26 @@
|
||||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
model tiny,stdcall
|
||||
p486
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
org 0100h
|
||||
|
||||
ent equ 32h
|
||||
|
||||
start:
|
||||
jmp CopyCOS
|
||||
jmp copycos
|
||||
|
||||
Message db 0Dh,0Ah,'COS 2000 V3.02Fr programme d''installation',0Dh,0AH,'Inserez une disquette formatee et appuyez sur entre...',0Dh,0AH,'Attention le contenu de celle ci peut etre altere !!!',0Dh,0AH,'$'
|
||||
Message2 db 0Dh,0AH,'Creation du secteur de demarrage...',0Dh,0Ah,'$'
|
||||
Message3 db 0Dh,0AH,'Copie des fichiers systeme...',0Dh,0Ah,'$'
|
||||
Errormsg db 0Dh,0AH,'Erreur d''installation, contactez moi a COS2000@MULTIMANIA.COM !',0Dh,0AH,'$'
|
||||
Ok db 0Dh,0AH,'COS2000 a été correctement installé, veuillez redemarrer votre PC',0Dh,0AH,'$'
|
||||
message db 0Dh,0Ah,'COS 2000 V1.3.1BetaFr programme d''installation',0Dh,0AH,'Inserez une disquette formatee et appuyez sur entre...',0Dh,0AH,'Attention le contenu de celle ci peut etre altere !!!',0Dh,0AH,'$'
|
||||
message2 db 0Dh,0AH,'Creation du secteur de demarrage...',0Dh,0Ah,'$'
|
||||
message3 db 0Dh,0AH,'Copie des fichiers systeme...',0Dh,0Ah,'$'
|
||||
errormsg db 0Dh,0AH,'Erreur d''installation, contactez moi a COS2000@MULTIMANIA.COM !',0Dh,0AH,'$'
|
||||
ok db 0Dh,0AH,'COS2000 a ete correctement installe, veuillez redemarrer votre PC',0Dh,0AH,'$'
|
||||
files db '*.*',0
|
||||
boot db 'boot.bin',0
|
||||
dat db 'data',0
|
||||
retu db 0Dh,0AH,'$'
|
||||
dta db 43 dup (0)
|
||||
nom db 25 dup (0)
|
||||
|
||||
copycos:
|
||||
mov ah,9
|
||||
@ -54,7 +54,7 @@ copycos:
|
||||
mov dx,offset message3
|
||||
int 21h
|
||||
allfile:
|
||||
mov byte ptr [offset dta+43],'$'
|
||||
mov [byte ptr offset dta+43],'$'
|
||||
mov ah,9
|
||||
mov dx,offset dta+30
|
||||
int 21h
|
||||
@ -97,13 +97,9 @@ allfile:
|
||||
mov ah,3ch
|
||||
push cs
|
||||
pop es
|
||||
mov si,offset dta+30-3
|
||||
mov di,offset nom
|
||||
mov cx,25
|
||||
rep movsb
|
||||
mov di,offset nom
|
||||
mov word ptr [di],":a"
|
||||
mov byte ptr [di+2],"\"
|
||||
mov di,offset dta+30-3
|
||||
mov [word ptr di],":a"
|
||||
mov [byte ptr di+2],"\"
|
||||
xor cx,cx
|
||||
mov dx,di
|
||||
int 21h
|
||||
@ -123,7 +119,7 @@ allfile:
|
||||
jc error
|
||||
mov ah,4fh
|
||||
int 21h
|
||||
jnc allfile
|
||||
jnc allfile
|
||||
mov ah,09
|
||||
mov dx,offset message2
|
||||
int 21h
|
||||
@ -134,7 +130,7 @@ allfile:
|
||||
push fs
|
||||
pop ds
|
||||
mov ah,3fh
|
||||
mov cx,000FFh
|
||||
mov cx,0FFFFh
|
||||
xor dx,dx
|
||||
int 21h
|
||||
push cs
|
||||
@ -151,7 +147,7 @@ allfile:
|
||||
xor bx,bx
|
||||
int 13h
|
||||
mov ah,09
|
||||
mov dx,offset Ok
|
||||
mov dx,offset ok
|
||||
int 21h
|
||||
xor ax,ax
|
||||
int 16h
|
||||
@ -165,5 +161,4 @@ error:
|
||||
xor ax,ax
|
||||
int 16h
|
||||
ret
|
||||
|
||||
end start
|
||||
|
||||
|
BIN
install/setup.sh
Executable file
BIN
install/setup.sh
Executable file
Binary file not shown.
121
install/winNT gui/setup.bpr
Normal file
121
install/winNT gui/setup.bpr
Normal file
@ -0,0 +1,121 @@
|
||||
<?xml version='1.0' encoding='utf-8' ?>
|
||||
<!-- C++Builder XML Project -->
|
||||
<PROJECT>
|
||||
<MACROS>
|
||||
<VERSION value="BCB.06.00"/>
|
||||
<PROJECT value="setup.exe"/>
|
||||
<OBJFILES value="setup.obj Unit1.obj"/>
|
||||
<RESFILES value="setup.res"/>
|
||||
<IDLFILES value=""/>
|
||||
<IDLGENFILES value=""/>
|
||||
<DEFFILE value=""/>
|
||||
<RESDEPEN value="$(RESFILES) Unit1.dfm"/>
|
||||
<LIBFILES value=""/>
|
||||
<LIBRARIES value="rtl.lib vcl.lib"/>
|
||||
<SPARELIBS value="vcl.lib rtl.lib"/>
|
||||
<PACKAGES value="vcl.bpi rtl.bpi dbrtl.bpi adortl.bpi vcldb.bpi vclx.bpi bdertl.bpi
|
||||
vcldbx.bpi ibxpress.bpi dsnap.bpi cds.bpi bdecds.bpi qrpt.bpi teeui.bpi
|
||||
teedb.bpi tee.bpi dss.bpi teeqr.bpi visualclx.bpi visualdbclx.bpi
|
||||
dsnapcrba.bpi dsnapcon.bpi bcbsmp.bpi vclie.bpi xmlrtl.bpi inet.bpi
|
||||
inetdbbde.bpi inetdbxpress.bpi inetdb.bpi nmfast.bpi webdsnap.bpi
|
||||
bcbie.bpi websnap.bpi soaprtl.bpi dclocx.bpi dbexpress.bpi dbxcds.bpi
|
||||
indy.bpi bcb2kaxserver.bpi pop.bpi IcsBcb50.bpi bcbshlctrls.bpi"/>
|
||||
<PATHCPP value=".;"/>
|
||||
<PATHPAS value=".;"/>
|
||||
<PATHRC value=".;"/>
|
||||
<PATHASM value=".;"/>
|
||||
<DEBUGLIBPATH value="$(BCB)\lib\debug"/>
|
||||
<RELEASELIBPATH value="$(BCB)\lib\release"/>
|
||||
<LINKER value="ilink32"/>
|
||||
<USERDEFINES value=""/>
|
||||
<SYSDEFINES value="_RTLDLL;NO_STRICT"/>
|
||||
<MAINSOURCE value="setup.cpp"/>
|
||||
<INCLUDEPATH value="E:\CBuilder6\Projects;"C:\Documents and Settings\niko\Bureau\Nouveau dossier";$(BCB)\include;$(BCB)\include\vcl"/>
|
||||
<LIBPATH value="E:\CBuilder6\Projects;"C:\Documents and Settings\niko\Bureau\Nouveau dossier";$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib"/>
|
||||
<WARNINGS value="-w-par"/>
|
||||
<OTHERFILES value=""/>
|
||||
</MACROS>
|
||||
<OPTIONS>
|
||||
<IDLCFLAGS value="-IE:\CBuilder6\Projects
|
||||
-I"C:\Documents and Settings\niko\Bureau\Nouveau dossier" -I$(BCB)\include
|
||||
-I$(BCB)\include\vcl -src_suffix cpp -boa"/>
|
||||
<CFLAG1 value="-O2 -H=$(BCB)\lib\vcl60.csm -Hc -w- -Vx -Ve -X- -a8 -b- -k- -vi -c -tW -tWM"/>
|
||||
<PFLAGS value="-$Y- -$L- -$D- -$A8 -v -JPHNE -M"/>
|
||||
<RFLAGS value=""/>
|
||||
<AFLAGS value="/mx /w2 /zn"/>
|
||||
<LFLAGS value="-D"" -aa -Tpe -x -Gn"/>
|
||||
<OTHERFILES value=""/>
|
||||
</OPTIONS>
|
||||
<LINKER>
|
||||
<ALLOBJ value="c0w32.obj Memmgr.Lib sysinit.obj $(OBJFILES)"/>
|
||||
<ALLRES value="$(RESFILES)"/>
|
||||
<ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib"/>
|
||||
<OTHERFILES value=""/>
|
||||
</LINKER>
|
||||
<FILELIST>
|
||||
<FILE FILENAME="setup.res" FORMNAME="" UNITNAME="setup.res" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
<FILE FILENAME="setup.cpp" FORMNAME="" UNITNAME="setup" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
<FILE FILENAME="Unit1.cpp" FORMNAME="Form1" UNITNAME="Unit1" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
</FILELIST>
|
||||
<BUILDTOOLS>
|
||||
</BUILDTOOLS>
|
||||
|
||||
<IDEOPTIONS>
|
||||
[Version Info]
|
||||
IncludeVerInfo=0
|
||||
AutoIncBuild=0
|
||||
MajorVer=1
|
||||
MinorVer=0
|
||||
Release=0
|
||||
Build=0
|
||||
Debug=0
|
||||
PreRelease=0
|
||||
Special=0
|
||||
Private=0
|
||||
DLL=0
|
||||
Locale=1036
|
||||
CodePage=1252
|
||||
|
||||
[Version Info Keys]
|
||||
CompanyName=
|
||||
FileDescription=
|
||||
FileVersion=1.0.0.0
|
||||
InternalName=
|
||||
LegalCopyright=
|
||||
LegalTrademarks=
|
||||
OriginalFilename=
|
||||
ProductName=
|
||||
ProductVersion=1.0.0.0
|
||||
Comments=
|
||||
|
||||
[Debugging]
|
||||
DebugSourceDirs=$(BCB)\source\vcl
|
||||
|
||||
[Parameters]
|
||||
RunParams=
|
||||
Launcher=
|
||||
UseLauncher=0
|
||||
DebugCWD=
|
||||
HostApplication=
|
||||
RemoteHost=
|
||||
RemotePath=
|
||||
RemoteLauncher=
|
||||
RemoteCWD=
|
||||
RemoteDebug=0
|
||||
|
||||
[Compiler]
|
||||
ShowInfoMsgs=0
|
||||
LinkDebugVcl=0
|
||||
LinkCGLIB=0
|
||||
|
||||
[CORBA]
|
||||
AddServerUnit=1
|
||||
AddClientUnit=1
|
||||
PrecompiledHeaders=1
|
||||
|
||||
[Language]
|
||||
ActiveLang=
|
||||
ProjectLang=
|
||||
RootDir=
|
||||
</IDEOPTIONS>
|
||||
</PROJECT>
|
33
install/winNT gui/setup.cpp
Normal file
33
install/winNT gui/setup.cpp
Normal file
@ -0,0 +1,33 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
//---------------------------------------------------------------------------
|
||||
USEFORM("Unit1.cpp", Form1);
|
||||
//---------------------------------------------------------------------------
|
||||
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
|
||||
{
|
||||
try
|
||||
{
|
||||
Application->Initialize();
|
||||
Application->CreateForm(__classid(TForm1), &Form1);
|
||||
Application->Run();
|
||||
}
|
||||
catch (Exception &exception)
|
||||
{
|
||||
Application->ShowException(&exception);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
try
|
||||
{
|
||||
throw Exception("");
|
||||
}
|
||||
catch (Exception &exception)
|
||||
{
|
||||
Application->ShowException(&exception);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
BIN
install/winNT gui/setup.res
Normal file
BIN
install/winNT gui/setup.res
Normal file
Binary file not shown.
BIN
install/winNT gui/setup.tds
Normal file
BIN
install/winNT gui/setup.tds
Normal file
Binary file not shown.
166
install/winNT gui/unit1.cpp
Normal file
166
install/winNT gui/unit1.cpp
Normal file
@ -0,0 +1,166 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#include <vcl.h>
|
||||
#include <winioctl.h>
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
#include <dir.h>
|
||||
#pragma hdrstop
|
||||
|
||||
#include "Unit1.h"
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
#pragma resource "*.dfm"
|
||||
TForm1 *Form1;
|
||||
HANDLE hDrive;
|
||||
DISK_GEOMETRY dg_flop_geom;
|
||||
AnsiString lecteur="b:";
|
||||
AnsiString device="\\\\.\\"+lecteur;
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall TForm1::TForm1(TComponent* Owner)
|
||||
: TForm(Owner)
|
||||
{
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
char * GetLastErrorString(void)
|
||||
{
|
||||
LPVOID lpMsgBuf;
|
||||
|
||||
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
(LPTSTR) &lpMsgBuf, 0, NULL);
|
||||
|
||||
return (char *)lpMsgBuf;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
ShowMessages(AnsiString msg)
|
||||
{
|
||||
Form1->Memo1->Lines->Add(msg);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TForm1::FormShow(TObject *Sender)
|
||||
{
|
||||
DWORD dwNotUsed;
|
||||
DWORD error=0;
|
||||
|
||||
hDrive = CreateFile(device.c_str(), GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
|
||||
ShowMessages("Ouverture du peripherique "+lecteur);
|
||||
if (hDrive == INVALID_HANDLE_VALUE) {
|
||||
ShowMessages("Erreur : "+AnsiString(GetLastErrorString()));
|
||||
error=1;
|
||||
}
|
||||
if(error!=1&&ShowMessages("Determination de la geometrie ")&&DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL,0, &dg_flop_geom, sizeof(dg_flop_geom),&dwNotUsed, NULL) == FALSE) {
|
||||
ShowMessages("Erreur : "+AnsiString(GetLastErrorString()));
|
||||
error=1;
|
||||
}
|
||||
if(error!=1&&(dg_flop_geom.MediaType==FixedMedia||dg_flop_geom.MediaType==RemovableMedia||dg_flop_geom.MediaType==Unknown))
|
||||
{
|
||||
ShowMessages("Erreur : Ceci n'est pas une disquette !");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1&&ShowMessages("Positionnement sur le secteur 0")&&SetFilePointer(hDrive, 0, NULL, FILE_BEGIN) == -1) {
|
||||
ShowMessages("Erreur : "+AnsiString(GetLastErrorString()));
|
||||
error=1;
|
||||
}
|
||||
if (error!=1)
|
||||
{
|
||||
drive->Caption=lecteur.UpperCase();
|
||||
track->Caption=IntToStr(dg_flop_geom.Cylinders.LowPart);
|
||||
sector->Caption=IntToStr(dg_flop_geom.SectorsPerTrack);
|
||||
size->Caption=IntToStr(dg_flop_geom.BytesPerSector);
|
||||
head->Caption=IntToStr(dg_flop_geom.TracksPerCylinder);
|
||||
allsize->Caption=IntToStr(dg_flop_geom.BytesPerSector*dg_flop_geom.Cylinders.LowPart*dg_flop_geom.SectorsPerTrack*dg_flop_geom.TracksPerCylinder);
|
||||
allsector->Caption=IntToStr(dg_flop_geom.Cylinders.LowPart*dg_flop_geom.SectorsPerTrack*dg_flop_geom.TracksPerCylinder);
|
||||
}
|
||||
else
|
||||
{
|
||||
CloseHandle(hDrive);
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TForm1::Button1Click(TObject *Sender)
|
||||
{
|
||||
if (hDrive == NULL||dg_flop_geom.TracksPerCylinder>2||dg_flop_geom.TracksPerCylinder==0)
|
||||
|
||||
{
|
||||
ShowMessages("Aucun support valide detecté !");
|
||||
}
|
||||
else
|
||||
{
|
||||
int fdboot;
|
||||
DWORD error=0;
|
||||
DWORD dwBsWritten;
|
||||
char * buffer;
|
||||
AnsiString bootfile="data/boot.bin";
|
||||
ShowMessages("Allocation de mémoire ");
|
||||
buffer = (char *)malloc(dg_flop_geom.BytesPerSector);
|
||||
ShowMessages("Ouverture et installation du fichier de boot "+bootfile);
|
||||
if ((fdboot = _rtl_open(bootfile.c_str(),O_RDONLY | O_BINARY)) == -1 )
|
||||
{
|
||||
ShowMessages("Erreur : Fichier de boot introuvable");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1&&_read(fdboot, buffer, dg_flop_geom.BytesPerSector)!= dg_flop_geom.BytesPerSector)
|
||||
{
|
||||
ShowMessages("Erreur : Fichier de boot de taille incorrecte !");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1&&WriteFile(hDrive, buffer, dg_flop_geom.BytesPerSector, &dwBsWritten, NULL) == 0)
|
||||
{
|
||||
ShowMessages("Ecriture impossible sur le secteur de boot !");
|
||||
error=1;
|
||||
}
|
||||
_rtl_close(fdboot);
|
||||
if (error!=1)
|
||||
{
|
||||
struct ffblk files;
|
||||
int done;
|
||||
int number=0;
|
||||
ShowMessages("Détermination des fichiers a copier");
|
||||
done = findfirst("data/*.*",&files,0);
|
||||
while (!done)
|
||||
{
|
||||
number++;
|
||||
done = findnext(&files);
|
||||
}
|
||||
install->Max=number;
|
||||
install->Min=0;
|
||||
install->Position=0;
|
||||
ShowMessages("Copie des fichiers de cos2000");
|
||||
done = findfirst("data/*.*",&files,0);
|
||||
while (!done)
|
||||
{
|
||||
ShowMessages(AnsiString(files.ff_name).LowerCase());
|
||||
if (!CopyFile((AnsiString("data/")+AnsiString(files.ff_name)).c_str(),(lecteur+"\\"+AnsiString(files.ff_name)).c_str(),false))
|
||||
{
|
||||
ShowMessages("Erreur : fichier impossible a copier"+AnsiString(GetLastErrorString()));
|
||||
error=1;
|
||||
break;
|
||||
}
|
||||
done = findnext(&files);
|
||||
install->Position++;
|
||||
}
|
||||
if (!error)
|
||||
{
|
||||
ShowMessages("Installation terminée !");
|
||||
Button2->Visible=false;
|
||||
Button1->Visible=false;
|
||||
Button3->Visible=true;
|
||||
}
|
||||
else
|
||||
ShowMessages("Installation echoué !");
|
||||
}
|
||||
free(buffer);
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
|
||||
{
|
||||
CloseHandle(hDrive);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TForm1::Button3Click(TObject *Sender)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
BIN
install/winNT gui/unit1.ddp
Normal file
BIN
install/winNT gui/unit1.ddp
Normal file
Binary file not shown.
184
install/winNT gui/unit1.dfm
Normal file
184
install/winNT gui/unit1.dfm
Normal file
@ -0,0 +1,184 @@
|
||||
object Form1: TForm1
|
||||
Left = 418
|
||||
Top = 273
|
||||
Width = 599
|
||||
Height = 371
|
||||
Caption = 'Installation de COS2000'
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
Position = poScreenCenter
|
||||
OnClose = FormClose
|
||||
OnShow = FormShow
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object Button1: TButton
|
||||
Left = 288
|
||||
Top = 304
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'installer...'
|
||||
TabOrder = 0
|
||||
OnClick = Button1Click
|
||||
end
|
||||
object install: TProgressBar
|
||||
Left = 16
|
||||
Top = 264
|
||||
Width = 553
|
||||
Height = 25
|
||||
Min = 0
|
||||
Max = 100
|
||||
TabOrder = 1
|
||||
end
|
||||
object Button2: TButton
|
||||
Left = 208
|
||||
Top = 304
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'support'
|
||||
TabOrder = 2
|
||||
OnClick = FormShow
|
||||
end
|
||||
object Memo1: TMemo
|
||||
Left = 192
|
||||
Top = 24
|
||||
Width = 377
|
||||
Height = 225
|
||||
ReadOnly = True
|
||||
TabOrder = 3
|
||||
end
|
||||
object GroupBox1: TGroupBox
|
||||
Left = 16
|
||||
Top = 120
|
||||
Width = 161
|
||||
Height = 129
|
||||
Caption = 'G'#233'om'#233'trie'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = []
|
||||
ParentFont = False
|
||||
TabOrder = 4
|
||||
object track: TLabel
|
||||
Left = 96
|
||||
Top = 60
|
||||
Width = 31
|
||||
Height = 13
|
||||
Caption = 'Aucun'
|
||||
end
|
||||
object Label4: TLabel
|
||||
Left = 24
|
||||
Top = 60
|
||||
Width = 34
|
||||
Height = 13
|
||||
Caption = 'Pistes :'
|
||||
end
|
||||
object Label5: TLabel
|
||||
Left = 24
|
||||
Top = 28
|
||||
Width = 48
|
||||
Height = 13
|
||||
Caption = 'Secteurs :'
|
||||
end
|
||||
object sector: TLabel
|
||||
Left = 96
|
||||
Top = 28
|
||||
Width = 31
|
||||
Height = 13
|
||||
Caption = 'Aucun'
|
||||
end
|
||||
object head: TLabel
|
||||
Left = 96
|
||||
Top = 44
|
||||
Width = 31
|
||||
Height = 13
|
||||
Caption = 'Aucun'
|
||||
end
|
||||
object Label6: TLabel
|
||||
Left = 24
|
||||
Top = 44
|
||||
Width = 33
|
||||
Height = 13
|
||||
Caption = 'Tetes :'
|
||||
end
|
||||
object Label8: TLabel
|
||||
Left = 24
|
||||
Top = 84
|
||||
Width = 69
|
||||
Height = 13
|
||||
Caption = 'Taille secteur :'
|
||||
end
|
||||
object size: TLabel
|
||||
Left = 96
|
||||
Top = 84
|
||||
Width = 31
|
||||
Height = 13
|
||||
Caption = 'Aucun'
|
||||
end
|
||||
end
|
||||
object GroupBox2: TGroupBox
|
||||
Left = 16
|
||||
Top = 16
|
||||
Width = 161
|
||||
Height = 97
|
||||
Caption = 'Support'
|
||||
TabOrder = 5
|
||||
object Label1: TLabel
|
||||
Left = 24
|
||||
Top = 24
|
||||
Width = 42
|
||||
Height = 13
|
||||
Caption = 'Lecteur :'
|
||||
end
|
||||
object drive: TLabel
|
||||
Left = 88
|
||||
Top = 24
|
||||
Width = 31
|
||||
Height = 13
|
||||
Caption = 'Aucun'
|
||||
end
|
||||
object Label2: TLabel
|
||||
Left = 24
|
||||
Top = 40
|
||||
Width = 31
|
||||
Height = 13
|
||||
Caption = 'Taille :'
|
||||
end
|
||||
object allsize: TLabel
|
||||
Left = 88
|
||||
Top = 40
|
||||
Width = 31
|
||||
Height = 13
|
||||
Caption = 'Aucun'
|
||||
end
|
||||
object Label3: TLabel
|
||||
Left = 24
|
||||
Top = 56
|
||||
Width = 58
|
||||
Height = 13
|
||||
Caption = 'N'#176'secteurs :'
|
||||
end
|
||||
object allsector: TLabel
|
||||
Left = 88
|
||||
Top = 56
|
||||
Width = 31
|
||||
Height = 13
|
||||
Caption = 'Aucun'
|
||||
end
|
||||
end
|
||||
object Button3: TButton
|
||||
Left = 248
|
||||
Top = 304
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Quitter'
|
||||
TabOrder = 6
|
||||
Visible = False
|
||||
OnClick = Button3Click
|
||||
end
|
||||
end
|
47
install/winNT gui/unit1.h
Normal file
47
install/winNT gui/unit1.h
Normal file
@ -0,0 +1,47 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef Unit1H
|
||||
#define Unit1H
|
||||
//---------------------------------------------------------------------------
|
||||
#include <Classes.hpp>
|
||||
#include <Controls.hpp>
|
||||
#include <StdCtrls.hpp>
|
||||
#include <Forms.hpp>
|
||||
#include <ComCtrls.hpp>
|
||||
//---------------------------------------------------------------------------
|
||||
class TForm1 : public TForm
|
||||
{
|
||||
__published: // IDE-managed Components
|
||||
TButton *Button1;
|
||||
TProgressBar *install;
|
||||
TButton *Button2;
|
||||
TMemo *Memo1;
|
||||
TGroupBox *GroupBox1;
|
||||
TLabel *track;
|
||||
TLabel *Label4;
|
||||
TLabel *Label5;
|
||||
TLabel *sector;
|
||||
TLabel *head;
|
||||
TLabel *Label6;
|
||||
TLabel *Label8;
|
||||
TLabel *size;
|
||||
TGroupBox *GroupBox2;
|
||||
TLabel *Label1;
|
||||
TLabel *drive;
|
||||
TLabel *Label2;
|
||||
TLabel *allsize;
|
||||
TLabel *Label3;
|
||||
TLabel *allsector;
|
||||
TButton *Button3;
|
||||
void __fastcall FormShow(TObject *Sender);
|
||||
void __fastcall Button1Click(TObject *Sender);
|
||||
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
|
||||
void __fastcall Button3Click(TObject *Sender);
|
||||
private: // User declarations
|
||||
public: // User declarations
|
||||
__fastcall TForm1(TComponent* Owner);
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
extern PACKAGE TForm1 *Form1;
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
4
install/winNT/setup.bpf
Normal file
4
install/winNT/setup.bpf
Normal file
@ -0,0 +1,4 @@
|
||||
This file is used by the project manager only and should be treated like the project file
|
||||
|
||||
|
||||
main
|
120
install/winNT/setup.bpr
Normal file
120
install/winNT/setup.bpr
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version='1.0' encoding='utf-8' ?>
|
||||
<!-- C++Builder XML Project -->
|
||||
<PROJECT>
|
||||
<MACROS>
|
||||
<VERSION value="BCB.06.00"/>
|
||||
<PROJECT value="setup.exe"/>
|
||||
<OBJFILES value="Unit1.obj"/>
|
||||
<RESFILES value="Setup.res"/>
|
||||
<IDLFILES value=""/>
|
||||
<IDLGENFILES value=""/>
|
||||
<DEFFILE value=""/>
|
||||
<RESDEPEN value="$(RESFILES)"/>
|
||||
<LIBFILES value=""/>
|
||||
<LIBRARIES value=""/>
|
||||
<SPARELIBS value=""/>
|
||||
<PACKAGES value="vcl.bpi rtl.bpi dbrtl.bpi adortl.bpi vcldb.bpi vclx.bpi bdertl.bpi
|
||||
vcldbx.bpi ibxpress.bpi dsnap.bpi cds.bpi bdecds.bpi qrpt.bpi teeui.bpi
|
||||
teedb.bpi tee.bpi dss.bpi teeqr.bpi visualclx.bpi visualdbclx.bpi
|
||||
dsnapcrba.bpi dsnapcon.bpi bcbsmp.bpi vclie.bpi xmlrtl.bpi inet.bpi
|
||||
inetdbbde.bpi inetdbxpress.bpi inetdb.bpi nmfast.bpi webdsnap.bpi
|
||||
bcbie.bpi websnap.bpi soaprtl.bpi dclocx.bpi dbexpress.bpi dbxcds.bpi
|
||||
indy.bpi bcb2kaxserver.bpi pop.bpi IcsBcb50.bpi bcbshlctrls.bpi"/>
|
||||
<PATHCPP value=".;"/>
|
||||
<PATHPAS value=".;"/>
|
||||
<PATHRC value=".;"/>
|
||||
<PATHASM value=".;"/>
|
||||
<DEBUGLIBPATH value="$(BCB)\lib\debug"/>
|
||||
<RELEASELIBPATH value="$(BCB)\lib\release"/>
|
||||
<LINKER value="ilink32"/>
|
||||
<USERDEFINES value=""/>
|
||||
<SYSDEFINES value="NO_STRICT;_NO_VCL;_RTLDLL"/>
|
||||
<MAINSOURCE value="Setup.bpf"/>
|
||||
<INCLUDEPATH value=""..\Nouveau dossier (2)";$(BCB)\include;$(BCB)\include\vcl"/>
|
||||
<LIBPATH value=""..\Nouveau dossier (2)";$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib"/>
|
||||
<WARNINGS value="-w-par"/>
|
||||
<OTHERFILES value=""/>
|
||||
</MACROS>
|
||||
<OPTIONS>
|
||||
<IDLCFLAGS value="-I"..\Nouveau dossier (2)" -I$(BCB)\include -I$(BCB)\include\vcl
|
||||
-src_suffix cpp -boa"/>
|
||||
<CFLAG1 value="-O2 -H=$(BCB)\lib\vcl60.csm -Hc -Vx -Ve -X- -a8 -b- -k- -vi -tWC -tWM- -c"/>
|
||||
<PFLAGS value="-$Y- -$L- -$D- -$A8 -v -JPHNE -M"/>
|
||||
<RFLAGS value=""/>
|
||||
<AFLAGS value="/mx /w2 /zn"/>
|
||||
<LFLAGS value="-D"" -ap -Tpe -x -Gn"/>
|
||||
<OTHERFILES value=""/>
|
||||
</OPTIONS>
|
||||
<LINKER>
|
||||
<ALLOBJ value="c0x32.obj $(OBJFILES)"/>
|
||||
<ALLRES value="$(RESFILES)"/>
|
||||
<ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cw32i.lib"/>
|
||||
<OTHERFILES value=""/>
|
||||
</LINKER>
|
||||
<FILELIST>
|
||||
<FILE FILENAME="Setup.res" FORMNAME="" UNITNAME="Setup.res" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
<FILE FILENAME="Setup.bpf" FORMNAME="" UNITNAME="Setup" CONTAINERID="BPF" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
<FILE FILENAME="Unit1.cpp" FORMNAME="" UNITNAME="Unit1" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
|
||||
</FILELIST>
|
||||
<BUILDTOOLS>
|
||||
</BUILDTOOLS>
|
||||
|
||||
<IDEOPTIONS>
|
||||
[Version Info]
|
||||
IncludeVerInfo=0
|
||||
AutoIncBuild=0
|
||||
MajorVer=1
|
||||
MinorVer=0
|
||||
Release=0
|
||||
Build=0
|
||||
Debug=0
|
||||
PreRelease=0
|
||||
Special=0
|
||||
Private=0
|
||||
DLL=0
|
||||
Locale=1036
|
||||
CodePage=1252
|
||||
|
||||
[Version Info Keys]
|
||||
CompanyName=
|
||||
FileDescription=
|
||||
FileVersion=1.0.0.0
|
||||
InternalName=
|
||||
LegalCopyright=
|
||||
LegalTrademarks=
|
||||
OriginalFilename=
|
||||
ProductName=
|
||||
ProductVersion=1.0.0.0
|
||||
Comments=
|
||||
|
||||
[Debugging]
|
||||
DebugSourceDirs=$(BCB)\source\vcl
|
||||
|
||||
[Parameters]
|
||||
RunParams=
|
||||
Launcher=
|
||||
UseLauncher=0
|
||||
DebugCWD=
|
||||
HostApplication=
|
||||
RemoteHost=
|
||||
RemotePath=
|
||||
RemoteLauncher=
|
||||
RemoteCWD=
|
||||
RemoteDebug=0
|
||||
|
||||
[Compiler]
|
||||
ShowInfoMsgs=0
|
||||
LinkDebugVcl=0
|
||||
LinkCGLIB=0
|
||||
|
||||
[CORBA]
|
||||
AddServerUnit=1
|
||||
AddClientUnit=1
|
||||
PrecompiledHeaders=1
|
||||
|
||||
[Language]
|
||||
ActiveLang=
|
||||
ProjectLang=
|
||||
RootDir=
|
||||
</IDEOPTIONS>
|
||||
</PROJECT>
|
BIN
install/winNT/setup.res
Normal file
BIN
install/winNT/setup.res
Normal file
Binary file not shown.
BIN
install/winNT/setup.tds
Normal file
BIN
install/winNT/setup.tds
Normal file
Binary file not shown.
135
install/winNT/unit1.cpp
Normal file
135
install/winNT/unit1.cpp
Normal file
@ -0,0 +1,135 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#include <windows.h>
|
||||
#include <winbase.h>
|
||||
#include <winioctl.h>
|
||||
#include <io.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <dir.h>
|
||||
#pragma hdrstop
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
char * GetLastErrorString(void)
|
||||
{
|
||||
LPVOID lpMsgBuf;
|
||||
|
||||
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
(LPTSTR) &lpMsgBuf, 0, NULL);
|
||||
|
||||
return (char *)lpMsgBuf;
|
||||
}
|
||||
|
||||
|
||||
#pragma argsused
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
DWORD dwNotUsed;
|
||||
DWORD error=0;
|
||||
HANDLE hDrive;
|
||||
DISK_GEOMETRY dg_flop_geom;
|
||||
char lecteur[4]="a:\0";
|
||||
char device[7]="\\\\.\\a:\0";
|
||||
int fdboot;
|
||||
DWORD dwBsWritten;
|
||||
char * buffer;
|
||||
char bootfile[14]="data/boot.bin\0";
|
||||
struct ffblk files;
|
||||
int done;
|
||||
int number=0;
|
||||
char src[80];
|
||||
char dest[80];
|
||||
printf("Installation de COS2000\nInserez une disquette et appuyer sur une touche...\n");
|
||||
getchar();
|
||||
hDrive = CreateFile(device, GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
|
||||
printf("Ouverture du peripherique %s\n",lecteur);
|
||||
if (hDrive == INVALID_HANDLE_VALUE) {
|
||||
printf("Erreur : %s\n",GetLastErrorString());
|
||||
error=1;
|
||||
}
|
||||
if(error!=1&&printf("Determination de la geometrie \n")&&DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL,0, &dg_flop_geom, sizeof(dg_flop_geom),&dwNotUsed, NULL) == FALSE) {
|
||||
printf("Erreur : %s\n",GetLastErrorString());
|
||||
error=1;
|
||||
}
|
||||
if(error!=1&&(dg_flop_geom.MediaType==FixedMedia||dg_flop_geom.MediaType==RemovableMedia||dg_flop_geom.MediaType==Unknown))
|
||||
{
|
||||
printf("Erreur : Ceci n'est pas une disquette !\n");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1&&printf("Positionnement sur le secteur 0\n")&&SetFilePointer(hDrive, 0, NULL, FILE_BEGIN) == -1) {
|
||||
printf("Erreur : %s\n",GetLastErrorString());
|
||||
error=1;
|
||||
}
|
||||
if (error!=1)
|
||||
{
|
||||
printf("Pistes :%u Secteurs:%u Tetes:%u Taille:%u\n",dg_flop_geom.Cylinders.LowPart,dg_flop_geom.SectorsPerTrack,dg_flop_geom.TracksPerCylinder,dg_flop_geom.BytesPerSector);
|
||||
}
|
||||
else
|
||||
{
|
||||
CloseHandle(hDrive);
|
||||
}
|
||||
if (hDrive == NULL||dg_flop_geom.TracksPerCylinder>2||dg_flop_geom.TracksPerCylinder==0)
|
||||
{
|
||||
printf("Aucun support valide detecte !");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1)
|
||||
{
|
||||
printf("Allocation de memoire\n");
|
||||
buffer = (char *)malloc(dg_flop_geom.BytesPerSector);
|
||||
printf("Ouverture et installation du fichier de boot %s\n",bootfile);
|
||||
}
|
||||
if (error!=1&&(fdboot = _rtl_open(bootfile,O_RDONLY | O_BINARY)) == -1 )
|
||||
{
|
||||
printf("Erreur : Fichier de boot introuvable\n");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1&&_read(fdboot, buffer, dg_flop_geom.BytesPerSector)!= dg_flop_geom.BytesPerSector)
|
||||
{
|
||||
printf("Erreur : Fichier de boot de taille incorrecte !\n");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1&&WriteFile(hDrive, buffer, dg_flop_geom.BytesPerSector, &dwBsWritten, NULL) == 0)
|
||||
{
|
||||
printf("Ecriture impossible sur le secteur de boot !\n");
|
||||
error=1;
|
||||
}
|
||||
if (error!=1)
|
||||
{
|
||||
_rtl_close(fdboot);
|
||||
printf("Determination des fichiers a copier\n\n");
|
||||
done = findfirst("data\\*.*",&files,0);
|
||||
while (!done)
|
||||
{
|
||||
number++;
|
||||
done = findnext(&files);
|
||||
}
|
||||
printf("Copie des fichiers de cos2000\n");
|
||||
done = findfirst("data\\*.*",&files,0);
|
||||
while (!done)
|
||||
{
|
||||
printf("%s\n",files.ff_name);
|
||||
sprintf(src, "data\\%s",files.ff_name);
|
||||
sprintf(dest, "%s\\%s",lecteur,files.ff_name);
|
||||
if (!CopyFile(src,dest,false))
|
||||
{
|
||||
printf("Erreur : fichier impossible a copier %s\n",GetLastErrorString());
|
||||
error=1;
|
||||
break;
|
||||
}
|
||||
done = findnext(&files);
|
||||
}
|
||||
if (!error)
|
||||
{
|
||||
printf("Installation terminee !\nVeuillez redemarrer votre PC afin de charger le systeme");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Installation echoué !");
|
||||
}
|
||||
free(buffer);
|
||||
}
|
||||
getchar();
|
||||
return 0;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
26
lib/MAKEFILE
Normal file
26
lib/MAKEFILE
Normal file
@ -0,0 +1,26 @@
|
||||
asm= lzasm
|
||||
lnk= elink
|
||||
|
||||
all: detect.lib video.lib
|
||||
|
||||
detect.lib: detect.obj
|
||||
$(lnk) detect.obj detect.lib
|
||||
|
||||
video.lib: video.obj
|
||||
$(lnk) video.obj video.lib
|
||||
|
||||
detect.obj:
|
||||
$(asm) detect.asm
|
||||
|
||||
video.obj:
|
||||
$(asm) video.asm
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.bak
|
||||
del *.lib
|
||||
del *.com
|
||||
del *.bin
|
||||
del *.sys
|
||||
del *.err
|
114
lib/bmp.asm
Normal file
114
lib/bmp.asm
Normal file
@ -0,0 +1,114 @@
|
||||
.model tiny
|
||||
.486
|
||||
smart
|
||||
locals
|
||||
.code
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
include ..\include\bmp.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,,offset exports,>
|
||||
|
||||
exports:
|
||||
db "showbmp",0
|
||||
dw showbmp
|
||||
db "loadbmppalet",0
|
||||
dw loadbmppalet
|
||||
dw 0
|
||||
|
||||
|
||||
;==========SHOWBMP=========
|
||||
;Affiche le BMP pointée par DS:%0 en %1, %2
|
||||
;<- DS:%0 BMP, %1 coordonnées X, %2 coordonnées Y
|
||||
;->
|
||||
;==========================
|
||||
showbmp PROC FAR
|
||||
ARG pointer:word, x:word, y:word=taille
|
||||
push bp
|
||||
mov bp,sp
|
||||
push ax bx cx dx si di
|
||||
mov si,[pointer]
|
||||
cmp word ptr [si+BMP_file.BMP_FileType],"MB"
|
||||
jne @@errorshowing
|
||||
mov edi,[si+BMP_BitMapOffset]
|
||||
add di,si
|
||||
mov ah,8
|
||||
xor ebx,ebx
|
||||
mov ecx,[si+offset BMP_File.BMP_height]
|
||||
mov edx,[si+offset BMP_File.BMP_width]
|
||||
and dx,11111100b
|
||||
cmp edx,[si+offset BMP_File.BMP_width]
|
||||
jae @@noadjust
|
||||
add dx,4
|
||||
@@noadjust:
|
||||
sub dx,[si+offset BMP_File.BMP_width]
|
||||
@@bouclette:
|
||||
mov al,[di]
|
||||
push bx cx
|
||||
add bx,[x]
|
||||
add cx,[y]
|
||||
int 47h
|
||||
pop cx bx
|
||||
inc bx
|
||||
inc di
|
||||
cmp ebx,[si+offset BMP_File.BMP_width]
|
||||
jb @@bouclette
|
||||
xor bx,bx
|
||||
add di,dx
|
||||
dec cx
|
||||
cmp cx,0
|
||||
jne @@bouclette
|
||||
clc
|
||||
pop di si dx cx bx ax
|
||||
pop bp
|
||||
retf taille
|
||||
|
||||
@@errorshowing:
|
||||
stc
|
||||
pop di si cx bx ax
|
||||
pop bp
|
||||
retf taille
|
||||
|
||||
showbmp ENDP
|
||||
|
||||
|
||||
;==========LOADBMPPALET=========
|
||||
;Charge la palette du BMP pointée par DS:%0
|
||||
;-> DS:%0 BMP
|
||||
;<-
|
||||
;===============================
|
||||
loadbmppalet PROC FAR
|
||||
ARG pointer:word=taille
|
||||
push bp
|
||||
mov bp,sp
|
||||
push ax bx cx dx si
|
||||
mov si,[pointer]
|
||||
mov bx,0400h+36h-4
|
||||
mov cx,100h
|
||||
mov dx, 3c8h
|
||||
paletteload:
|
||||
mov al, cl
|
||||
dec al
|
||||
out dx, al
|
||||
inc dx
|
||||
mov al,[bx+si+2]
|
||||
shr al,2
|
||||
out dx, al
|
||||
mov al,[bx+si+1]
|
||||
shr al,2
|
||||
out dx, al
|
||||
mov al,[bx+si]
|
||||
shr al,2
|
||||
out dx, al
|
||||
sub bx,4
|
||||
dec dx
|
||||
dec cl
|
||||
jnz paletteload
|
||||
pop si dx cx bx ax
|
||||
pop bp
|
||||
retf taille
|
||||
loadbmppalet ENDP
|
||||
|
||||
end start
|
772
lib/detect.asm
Normal file
772
lib/detect.asm
Normal file
@ -0,0 +1,772 @@
|
||||
model tiny,stdcall
|
||||
p586
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\cpu.h"
|
||||
include "..\include\pci.h"
|
||||
|
||||
org 0h
|
||||
|
||||
header exe <"CE",1,0,0,offset exports,,,>
|
||||
|
||||
exports:
|
||||
db "cpuinfo",0
|
||||
dw cpuinfo
|
||||
db "setinfo",0
|
||||
dw setinfo
|
||||
db "pciinfo",0
|
||||
dw pciinfo
|
||||
db "getpciclass",0
|
||||
dw getpciclass
|
||||
db "getpcisubclass",0
|
||||
dw getpcisubclass
|
||||
db "getcardinfo",0
|
||||
dw getcardinfo
|
||||
db "pcireadbyte",0
|
||||
dw pcireadbyte
|
||||
db "pcireadword",0
|
||||
dw pcireadword
|
||||
db "pcireaddword",0
|
||||
dw pcireaddword
|
||||
db "detectvmware",0
|
||||
dw detectvmware
|
||||
dd 0
|
||||
|
||||
PROC detectvmware FAR
|
||||
USES eax,ebx,ecx,edx
|
||||
mov eax,564D5868h
|
||||
mov ebx,12345h
|
||||
mov ecx,00Ah
|
||||
mov edx,5658h
|
||||
in ax,dx
|
||||
cmp ebx,564D5868h
|
||||
ret
|
||||
endp detectvmware
|
||||
|
||||
;renvoie un pointer dx:ax vers la classe %0
|
||||
PROC getpciclass FAR
|
||||
ARG @class:word
|
||||
USES di
|
||||
mov di,[@class]
|
||||
and di,0FFh
|
||||
shl di,1
|
||||
mov ax,[cs:offset classes+di]
|
||||
mov dx,cs
|
||||
ret
|
||||
endp getpciclass
|
||||
|
||||
;renvoie un pointer dx:ax vers la sous-classe de %1 et de classe %0
|
||||
PROC getpcisubclass FAR
|
||||
ARG @class:word,@subclass:word
|
||||
USES di
|
||||
mov di,[@class]
|
||||
and di,0FFh
|
||||
shl di,1
|
||||
mov di,[cs:offset classesd+di]
|
||||
mov dx,[@subclass]
|
||||
and dx,0FFh
|
||||
cmp dx,80h
|
||||
jne @@suiteac
|
||||
mov ax,offset divers
|
||||
jmp @@found
|
||||
@@suiteac:
|
||||
shl dx,1
|
||||
add di,dx
|
||||
mov ax,[cs:di]
|
||||
@@found:
|
||||
mov dx,cs
|
||||
ret
|
||||
endp getpcisubclass
|
||||
|
||||
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
|
||||
|
||||
|
||||
;al=bus cl=deviceid ch=func es:di
|
||||
PROC getcardinfo FAR
|
||||
ARG @bus:word,@device:word,@function:word,@pointer:word
|
||||
USES eax,bx,di
|
||||
cmp [@function],0
|
||||
je @@amultiorfirst
|
||||
call pcireadbyte,[@bus],[@device],0,offset (pcidata).typed
|
||||
and al,multifunction
|
||||
cmp al,0
|
||||
jne @@amultiorfirst
|
||||
mov [word ptr di],0000h
|
||||
jmp @@notexist
|
||||
@@amultiorfirst:
|
||||
xor bx,bx
|
||||
mov di,[@pointer]
|
||||
@@goinfos:
|
||||
call pcireadword,[@bus],[@device],[@function],bx
|
||||
inc bl
|
||||
inc bl
|
||||
cmp bl,2
|
||||
ja @@notzarb
|
||||
cmp ax,0FFFFh
|
||||
je @@notexist
|
||||
cmp ax,00000h
|
||||
je @@notexist
|
||||
@@notzarb:
|
||||
mov [ds:di],ax
|
||||
inc di
|
||||
inc di
|
||||
cmp bl,40h
|
||||
jbe @@goinfos
|
||||
clc
|
||||
ret
|
||||
@@notexist:
|
||||
stc
|
||||
ret
|
||||
endp getcardinfo
|
||||
|
||||
;lit un octet du bus %0 device %1 function %2 n° %3 et le met en AL
|
||||
PROC pcireadbyte FAR
|
||||
ARG @bus:word,@device:word,@function:word,@pointer:word
|
||||
USES bx,dx
|
||||
mov al,[byte ptr @bus]
|
||||
mov ah,80h
|
||||
shl eax,16
|
||||
mov ah,[byte ptr @device]
|
||||
shl ah,3
|
||||
or ah,[byte ptr @function]
|
||||
mov bl,[byte ptr @pointer]
|
||||
mov al,bl
|
||||
and al,0fch
|
||||
mov dx,config1addr
|
||||
out dx,eax
|
||||
mov dx,config1data
|
||||
and bl,3
|
||||
or dl,bl
|
||||
in al,dx
|
||||
ret
|
||||
endp pcireadbyte
|
||||
|
||||
;lit 2 octet du bus %0 device %1 function %2 n° %3 et le met en AX
|
||||
PROC pcireadword FAR
|
||||
ARG @bus:word,@device:word,@function:word,@pointer:word
|
||||
USES bx,dx
|
||||
mov al,[byte ptr @bus]
|
||||
mov ah,80h
|
||||
shl eax,16
|
||||
mov ah,[byte ptr @device]
|
||||
shl ah,3
|
||||
or ah,[byte ptr @function]
|
||||
mov bl,[byte ptr @pointer]
|
||||
mov al,bl
|
||||
and al,0fch
|
||||
mov dx,config1addr
|
||||
out dx,eax
|
||||
mov dx,config1data
|
||||
and bl,3
|
||||
or dl,bl
|
||||
in ax,dx
|
||||
ret
|
||||
endp pcireadword
|
||||
|
||||
;lit 4 octet du bus %0 device %1 function %2 n° %3 et le met en EAX
|
||||
PROC pcireaddword FAR
|
||||
ARG @bus:word,@device:word,@function:word,@pointer:word
|
||||
USES bx,dx
|
||||
mov al,[byte ptr @bus]
|
||||
mov ah,80h
|
||||
shl eax,16
|
||||
mov ah,[byte ptr @device]
|
||||
shl ah,3
|
||||
or ah,[byte ptr @function]
|
||||
mov bl,[byte ptr @pointer]
|
||||
mov al,bl
|
||||
and al,0fch
|
||||
mov dx,config1addr
|
||||
out dx,eax
|
||||
mov dx,config1data
|
||||
and bl,3
|
||||
or dl,bl
|
||||
in eax,dx
|
||||
ret
|
||||
endp pcireaddword
|
||||
|
||||
;Prob avec str pci
|
||||
;renvoie en %0 la structure pciinf carry if error
|
||||
PROC pciinfo FAR
|
||||
ARG @pointer:word
|
||||
USES ax,bx,cx,edx,edi
|
||||
mov ax,0B101h
|
||||
xor edi,edi
|
||||
mov edx," PCI"
|
||||
int 1Ah
|
||||
jc @@errorpci
|
||||
cmp dx,04350h
|
||||
jne @@errorpci
|
||||
cmp ah,0
|
||||
jne @@errorpci
|
||||
mov di,[@pointer]
|
||||
mov [(pciinf di).version_major],bh
|
||||
mov [(pciinf di).version_minor],bl
|
||||
mov [(pciinf di).types],al
|
||||
mov [(pciinf di).maxbus],cl
|
||||
clc
|
||||
ret
|
||||
@@errorpci:
|
||||
stc
|
||||
ret
|
||||
endp pciinfo
|
||||
|
||||
|
||||
;retourne en DS:%1 les set supporté du processeur par rapport a la struct %0
|
||||
PROC setinfo FAR
|
||||
ARG @pointer:word,@set:word
|
||||
USES bx,si,di
|
||||
mov di,[@set]
|
||||
lea si,[ds:cpu.mmx]
|
||||
add si,[@pointer]
|
||||
mov bx,offset @@theset
|
||||
@@set:
|
||||
cmp [word ptr cs:bx],0FFFFh
|
||||
je @@endofset
|
||||
cmp [byte ptr si],1
|
||||
jne @@nextset
|
||||
push bx
|
||||
mov bx,[cs:bx]
|
||||
@@put:
|
||||
mov al,[cs:bx]
|
||||
cmp al,0
|
||||
je @@enofput
|
||||
mov [di],al
|
||||
inc bx
|
||||
inc di
|
||||
jmp @@put
|
||||
@@enofput:
|
||||
pop bx
|
||||
@@nextset:
|
||||
inc bx
|
||||
inc bx
|
||||
inc si
|
||||
jmp @@set
|
||||
@@endofset:
|
||||
mov [byte ptr di],0
|
||||
ret
|
||||
|
||||
@@theset dw offset @@mmx
|
||||
dw offset @@mmx2
|
||||
dw offset @@sse
|
||||
dw offset @@sse2
|
||||
dw offset @@sse3
|
||||
dw offset @@fpu
|
||||
dw offset @@now3d
|
||||
dw offset @@now3d2
|
||||
dw offset @@htt
|
||||
dw offset @@apic
|
||||
dw 0FFFFh
|
||||
|
||||
@@mmx db "MMX ",0
|
||||
@@mmx2 db "MMX2 ",0
|
||||
@@now3d db "3dNow! ",0
|
||||
@@now3d2 db "3dNow Extended! ",0
|
||||
@@htt db "HyperThreading",0
|
||||
@@sse db "SSE ",0
|
||||
@@sse2 db "SSE2 ",0
|
||||
@@sse3 db "SSE3 ",0
|
||||
@@apic db "APIC ",0
|
||||
@@fpu db "FPU ",0
|
||||
|
||||
endp setinfo
|
||||
|
||||
;retourne en DS:%0 les capacités du processeur
|
||||
PROC cpuinfo FAR
|
||||
ARG @pointer:word
|
||||
USES eax,ebx,ecx,edx,si,di,ds,es
|
||||
push ds
|
||||
pop es
|
||||
mov di,[@pointer]
|
||||
mov al,0
|
||||
mov cx,size cpu
|
||||
cld
|
||||
rep stosb
|
||||
mov di,[@pointer]
|
||||
call nocpuid ;Test si cpuid est dispo
|
||||
je @@nocpuidatall
|
||||
xor eax,eax
|
||||
cpuid ;Fonction 0 de CPUID
|
||||
mov [dword ptr (cpu di).vendor],ebx ;Vendeur sur 13 octets
|
||||
mov [dword ptr (cpu di+4).vendor],edx
|
||||
mov [dword ptr (cpu di+8).vendor],ecx
|
||||
mov [byte ptr (cpu di+12).vendor],0
|
||||
cmp eax,1
|
||||
jb @@nofonc1
|
||||
mov eax,1
|
||||
cpuid ;Fonction 1 de CPUID
|
||||
mov ebx,eax ;infos de model
|
||||
and ebx,1111b
|
||||
mov [(cpu di).stepping],bl
|
||||
shr eax,4
|
||||
mov ebx,eax
|
||||
and ebx,1111b
|
||||
mov [(cpu di).models],bl
|
||||
shr eax,4
|
||||
mov ebx,eax
|
||||
and ebx,1111b
|
||||
mov [(cpu di).family],bl
|
||||
shr eax,4
|
||||
mov ebx,eax
|
||||
and ebx,11b
|
||||
mov [(cpu di).types],bl
|
||||
shr eax,2
|
||||
mov ebx,eax
|
||||
and ebx,1111b
|
||||
mov [(cpu di).emodels],bl
|
||||
shr eax,4
|
||||
mov [(cpu di).efamily],al
|
||||
mov ebx,edx
|
||||
and ebx,1 ;infos de jeu d'instruction
|
||||
setnz [(cpu di).fpu]
|
||||
mov ebx,edx
|
||||
and ebx,100000000000000000000000b
|
||||
setnz [(cpu di).mmx]
|
||||
mov ebx,edx
|
||||
and ebx,10000000000000000000000000b
|
||||
setnz [(cpu di).sse]
|
||||
mov ebx,edx
|
||||
and ebx,100000000000000000000000000b
|
||||
setnz [(cpu di).sse2]
|
||||
mov ebx,ecx
|
||||
and ebx,1b
|
||||
setnz [(cpu di).sse3]
|
||||
mov ebx,edx
|
||||
and ebx,10000000000000000000000000000b
|
||||
setnz [(cpu di).htt]
|
||||
@@nofonc1:
|
||||
mov eax,80000000h ;Fonction 80000000 de CPUID
|
||||
cpuid
|
||||
cmp eax,80000001h
|
||||
jb @@nofonc8
|
||||
mov eax,80000001h ;Fonction 80000000 de CPUID
|
||||
cpuid
|
||||
mov ebx,edx
|
||||
and ebx,10000000000000000000000b
|
||||
setnz [(cpu di).mmx2]
|
||||
mov ebx,edx
|
||||
and ebx,1000000000000000000000000000000b
|
||||
setnz [(cpu di).now3d]
|
||||
mov ebx,edx
|
||||
and ebx,10000000000000000000000000000000b
|
||||
setnz [(cpu di).now3d2]
|
||||
mov ebx,edx
|
||||
and ebx,1000000000b
|
||||
setnz [(cpu di).apic]
|
||||
@@nofonc8:
|
||||
mov si,offset @@marks
|
||||
push cs
|
||||
pop ds
|
||||
@@search:
|
||||
mov di,[@pointer]
|
||||
mov cx,12
|
||||
cld
|
||||
rep cmpsb
|
||||
jne @@notthegood
|
||||
cmp cx,0
|
||||
jne @@notthegood
|
||||
mov cl,[si]
|
||||
inc si
|
||||
mov di,[@pointer]
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
mov di,[@pointer]
|
||||
cmp [es:(cpu di).family],15
|
||||
jne @@notextended
|
||||
mov al,[es:(cpu di).efamily]
|
||||
mov ah,[es:(cpu di).emodels]
|
||||
mov di,[si+2]
|
||||
jmp @@searchmodel
|
||||
@@notextended:
|
||||
mov al,[es:(cpu di).family]
|
||||
mov ah,[es:(cpu di).models]
|
||||
mov di,[si]
|
||||
@@searchmodel:
|
||||
cmp [di],ax
|
||||
jne @@notgoodfamily
|
||||
mov si,di
|
||||
inc si
|
||||
inc si
|
||||
lea di,[es:cpu.names]
|
||||
add di,[@pointer]
|
||||
@@copystr:
|
||||
mov al,[si]
|
||||
mov [es:di],al
|
||||
inc si
|
||||
inc di
|
||||
cmp al,0
|
||||
jne @@copystr
|
||||
jmp @@endofsearch
|
||||
@@notgoodfamily:
|
||||
inc di
|
||||
@@nextelement:
|
||||
inc di
|
||||
cmp [byte ptr di-1],0
|
||||
jne @@nextelement
|
||||
jmp @@searchmodel
|
||||
@@notthegood:
|
||||
inc si
|
||||
cmp [word ptr si],0FFFFh
|
||||
jne @@notthegood
|
||||
inc si
|
||||
inc si
|
||||
cmp [word ptr si],0FFFFh
|
||||
je @@endofsearch
|
||||
jmp @@search
|
||||
@@endofsearch:
|
||||
ret
|
||||
@@nocpuidatall:
|
||||
ret
|
||||
|
||||
;tableau avec vendeur taille + chainereelle + pointeur famille + pointeur famille etendue
|
||||
|
||||
@@marks db "GenuineIntel",5,"Intel"
|
||||
dw @@intelfamily,@@intelfamilye
|
||||
dw 0FFFFh
|
||||
|
||||
db "AuthenticAMD",3,"Amd"
|
||||
dw @@amdfamily,@@amdfamilye
|
||||
dw 0FFFFh
|
||||
|
||||
db "CyrixInstead",5,"Cyrix"
|
||||
dw @@cyrixfamily,@@cyrixfamilye
|
||||
dw 0FFFFh
|
||||
dw 0FFFFh
|
||||
|
||||
|
||||
;tableau avec famille modele et chaine 0
|
||||
|
||||
@@intelfamily:
|
||||
db 4,0,"486 DX-25/33",0
|
||||
db 4,1,"486 DX-50",0
|
||||
db 4,2,"486 SX",0
|
||||
db 4,3,"486 DX/2",0
|
||||
db 4,4,"486 SL",0
|
||||
db 4,5,"486 SX/2",0
|
||||
db 4,7,"486 DX/2-WB",0
|
||||
db 4,8,"486 DX/4",0
|
||||
db 4,9,"486 DX/4-WB",0
|
||||
db 5,0,"Pentium 60/66 A-step",0
|
||||
db 5,1,"Pentium 60/66",0
|
||||
db 5,2,"Pentium 75 - 200",0
|
||||
db 5,3,"OverDrive PODP5V83",0
|
||||
db 5,4,"Pentium MMX",0
|
||||
db 5,7,"Mobile Pentium 75-200",0
|
||||
db 5,8,"Mobile Pentium MMX",0
|
||||
db 6,0,"Pentium Pro A-step",0
|
||||
db 6,1,"Pentium Pro",0
|
||||
db 6,3,"Pentium II (Klamath)",0
|
||||
db 6,5,"Pentium II (Deschutes)",0
|
||||
db 6,6,"Mobile Pentium II",0
|
||||
db 6,7,"Pentium III (Katmai)",0
|
||||
db 6,8,"Pentium III (Coppermine)",0
|
||||
db 6,9,"Mobile Pentium III",0
|
||||
db 6,10,"Pentium III (0.18 µm)",0
|
||||
db 6,11,"Pentium III (0.13 µm)",0
|
||||
db 7,0,"Itanium (IA-64)",0
|
||||
db 0FFh,0FFh,"Inconnu",0
|
||||
|
||||
@@intelfamilye:
|
||||
db 0,0,"Pentium IV (0.18 µm)",0
|
||||
db 0,1,"Pentium IV (0.18 µm)",0
|
||||
db 0,2,"Pentium IV (0.13 µm)",0
|
||||
db 0,3,"Pentium IV (0.09 µm)",0
|
||||
db 1,0,"Itanium 2 (IA-64)",0
|
||||
db 0FFh,0FFh,"Inconnu",0
|
||||
|
||||
@@amdfamily:
|
||||
db 4,3,"486 DX/2",0
|
||||
db 4,7,"486 DX/2-WB",0
|
||||
db 4,8,"486 DX/4",0
|
||||
db 4,9,"486 DX/4-WB",0
|
||||
db 4,14,"Am5x86-WT",0
|
||||
db 4,15,"Am5x86-WB",0
|
||||
db 5,0,"K5/SSA5",0
|
||||
db 5,1,"K5 (PR120/133)",0
|
||||
db 5,2,"K5 (PR166)",0
|
||||
db 5,3,"K5 (PR200)",0
|
||||
db 5,6,"K6 (0.30 µm)",0
|
||||
db 5,7,"K6 (0.25 µm)",0
|
||||
db 5,8,"K6-2",0
|
||||
db 5,9,"K6-3",0
|
||||
db 5,13,"K6-2+/K6-III+ (0.18 µm)",0
|
||||
db 6,0,"Athlon (25 µm)",0
|
||||
db 6,1,"Athlon (25 µm)",0
|
||||
db 6,2,"Athlon (18 µm)",0
|
||||
db 6,3,"Duron",0
|
||||
db 6,4,"Athlon (Thunderbird)",0
|
||||
db 6,6,"Athlon (Palamino)",0
|
||||
db 6,7,"Duron (Morgan)",0
|
||||
db 6,8,"Athlon (Thoroughbred)",0
|
||||
db 6,10,"Athlon (Barton)",0
|
||||
db 0FFh,0FFh,"Inconnu",0
|
||||
|
||||
@@amdfamilye:
|
||||
db 0,4,"Athlon 64",0
|
||||
db 0,5,"Athlon 64 FX/Opteron",0
|
||||
db 0FFh,0FFh,"Inconnu",0
|
||||
|
||||
@@cyrixfamily:
|
||||
db 4,4,"MediaGX",0
|
||||
db 5,2,"6x86/6x86L",0
|
||||
db 5,4,"MediaGX MMX Enhanced",0
|
||||
db 6,0,"MII (6x86MX)",0
|
||||
db 6,5,"VIA Cyrix M2 core",0
|
||||
db 6,6,"WinChip C5A",0
|
||||
db 6,7,"WinChip C5B/WinChip C5C",0
|
||||
db 6,8,"WinChip C5N",0
|
||||
db 6,9,"WinChip C5XL/WinChip C5P",0
|
||||
db 0FFh,0FFh,"Inconnu",0
|
||||
|
||||
@@cyrixfamilye:
|
||||
db 0FFh,0FFh,"Inconnu",0
|
||||
|
||||
endp cpuinfo
|
||||
|
||||
;Test si CPUID est supporté oui=not Equal
|
||||
nocpuid:
|
||||
pushfd
|
||||
pop eax
|
||||
xor eax,00200000h
|
||||
push eax
|
||||
popfd
|
||||
pushfd
|
||||
pop eax
|
||||
cmp eax,ebx
|
||||
ret
|
||||
|
||||
|
907
lib/video.asm
Normal file
907
lib/video.asm
Normal file
@ -0,0 +1,907 @@
|
||||
model tiny,stdcall
|
||||
p486
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
|
||||
org 0h
|
||||
|
||||
header exe <"CE",1,0,0,offset exports,offset imports,,>
|
||||
|
||||
exports:
|
||||
db "print",0
|
||||
dw print
|
||||
db "showdate",0
|
||||
dw showdate
|
||||
db "showtime",0
|
||||
dw showtime
|
||||
db "showname",0
|
||||
dw showname
|
||||
db "showattr",0
|
||||
dw showattr
|
||||
db "showsize",0
|
||||
dw showsize
|
||||
db "showspace",0
|
||||
dw showspace
|
||||
db "showint",0
|
||||
dw showint
|
||||
db "showsigned",0
|
||||
dw showsigned
|
||||
db "showhex",0
|
||||
dw showhex
|
||||
db "showbin",0
|
||||
dw showbin
|
||||
db "showbcd",0
|
||||
dw showbcd
|
||||
db "showstring",0
|
||||
dw showstring
|
||||
db "showstring0",0
|
||||
dw showstring0
|
||||
db "showintr",0
|
||||
dw showintr
|
||||
db "showintl",0
|
||||
dw showintl
|
||||
dw 0
|
||||
|
||||
imports:
|
||||
db "VIDEO::addline",0
|
||||
addline dd 0
|
||||
db "VIDEO::setcolor",0
|
||||
setcolor dd 0
|
||||
db "VIDEO::getxy",0
|
||||
getxy dd 0
|
||||
db "VIDEO::setxy",0
|
||||
setxy dd 0
|
||||
db "VIDEO::setvideomode",0
|
||||
setvideomode dd 0
|
||||
db "VIDEO::setfont",0
|
||||
setfont dd 0
|
||||
db "VIDEO::clearscreen",0
|
||||
clearscreen dd 0
|
||||
db "VIDEO::enablescroll",0
|
||||
enablescroll dd 0
|
||||
db "VIDEO::disablescroll",0
|
||||
disablescroll dd 0
|
||||
db "VIDEO::showchar",0
|
||||
showchar dd 0
|
||||
dw 0
|
||||
|
||||
;================PRINT==============
|
||||
;Affiche la chaine %0 en utilisant les parametres de formatage %x....%x
|
||||
;-> %0 %x
|
||||
;<-
|
||||
;===================================
|
||||
PROC print FAR
|
||||
ARG @@pointer:word
|
||||
push ax bx cx si di
|
||||
xor di,di
|
||||
mov si,[@@pointer]
|
||||
@@strinaize0:
|
||||
mov cl,[si]
|
||||
cmp cl,0
|
||||
je @@no0
|
||||
cmp cl,'%'
|
||||
je @@special
|
||||
cmp cl,'\'
|
||||
je @@special2
|
||||
@@showit:
|
||||
xor ch,ch
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
inc si
|
||||
jmp @@strinaize0
|
||||
@@special:
|
||||
cmp [byte ptr si+1],'%'
|
||||
jne @@notshowit
|
||||
inc si
|
||||
jmp @@showit
|
||||
@@notshowit:
|
||||
mov cl,[byte ptr si+1]
|
||||
cmp cl,'c'
|
||||
je @@showchar
|
||||
cmp cl,'u'
|
||||
je @@showint
|
||||
cmp cl,'v'
|
||||
je @@showfixint
|
||||
cmp cl,'w'
|
||||
je @@showintr
|
||||
cmp cl,'i'
|
||||
je @@showsigned
|
||||
cmp cl,'h'
|
||||
je @@showhex
|
||||
cmp cl,'b'
|
||||
je @@showbin
|
||||
cmp cl,'s'
|
||||
je @@showstring
|
||||
cmp cl,'0'
|
||||
je @@showstring0
|
||||
cmp cl,'y'
|
||||
je @@showbcd
|
||||
cmp cl,'z'
|
||||
je @@showsize
|
||||
cmp cl,'a'
|
||||
je @@showattr
|
||||
cmp cl,'n'
|
||||
je @@showname
|
||||
cmp cl,'t'
|
||||
je @@showtime
|
||||
cmp cl,'d'
|
||||
je @@showdate
|
||||
clc
|
||||
jmp @@no0
|
||||
|
||||
@@showchar:
|
||||
cmp [byte ptr si+2],'M'
|
||||
je @@showmultchar
|
||||
call [cs:showchar],[word ptr @@pointer+di+2],0FFFFh
|
||||
add si,2
|
||||
add di,2
|
||||
jmp @@strinaize0
|
||||
@@showmultchar:
|
||||
mov cx,[offset @@pointer+di+2+2]
|
||||
cmp cx,0
|
||||
je @@nextfunc
|
||||
@@showcharx:
|
||||
call [cs:showchar],[word ptr @@pointer+di+2],0FFFFh
|
||||
dec cx
|
||||
jnz @@showcharx
|
||||
@@nextfunc:
|
||||
add si,3
|
||||
add di,4
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showint:
|
||||
call showint,[dword ptr @@pointer+di+2]
|
||||
add si,2
|
||||
add di,4
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showfixint:
|
||||
call showintl,[word ptr @@pointer+di+6],[dword ptr @@pointer+di+2]
|
||||
add di,6
|
||||
add si,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showintr:
|
||||
call showintr,[word ptr @@pointer+di+6],[dword ptr @@pointer+di+2]
|
||||
add di,6
|
||||
add si,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showsigned:
|
||||
call @@Chosesize
|
||||
call showsigned
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showhex:
|
||||
call @@Chosesize
|
||||
call showhex
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showbin:
|
||||
call @@Chosesize
|
||||
call showbin
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showstring:
|
||||
cmp [byte ptr si+2],'P'
|
||||
je @@showstring@@pointer
|
||||
call showstring,[word ptr @@pointer+di+2]
|
||||
add si,2
|
||||
add di,2
|
||||
jmp @@strinaize0
|
||||
@@showstring@@pointer:
|
||||
push ds
|
||||
mov ds,[offset @@pointer+di+2+2]
|
||||
call showstring,[word ptr @@pointer+di+2]
|
||||
add si,3
|
||||
add di,4
|
||||
pop ds
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showstring0:
|
||||
cmp [byte ptr si+2],'P'
|
||||
je @@showstring0@@pointer
|
||||
call showstring0,[word ptr offset @@pointer+di+2]
|
||||
add si,2
|
||||
add di,2
|
||||
jmp @@strinaize0
|
||||
@@showstring0@@pointer:
|
||||
push ds
|
||||
mov ds,[offset @@pointer+di+2+2]
|
||||
call showstring0,[word ptr offset @@pointer+di+2]
|
||||
add si,3
|
||||
add di,4
|
||||
pop ds
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showbcd:
|
||||
call @@Chosesize
|
||||
call showbcd
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showsize:
|
||||
call showsize,[dword ptr offset @@pointer+di+2]
|
||||
add si,2
|
||||
add di,4
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showattr:
|
||||
call showattr,[word ptr offset @@pointer+di+2]
|
||||
add si,2
|
||||
add di,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showname:
|
||||
call showname,[word ptr offset @@pointer+di+2]
|
||||
add si,2
|
||||
add di,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showtime:
|
||||
call showtime,[word ptr offset @@pointer+di+2]
|
||||
add si,2
|
||||
add di,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showdate:
|
||||
call showdate,[word ptr offset @@pointer+di+2]
|
||||
add si,2
|
||||
add di,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@Chosesize:
|
||||
pop cx
|
||||
push [dword ptr offset @@pointer+di+2]
|
||||
add di,4
|
||||
cmp [byte ptr si+2],'B'
|
||||
je @@byte
|
||||
cmp [byte ptr si+2],'W'
|
||||
je @@word
|
||||
cmp [byte ptr si+2],'D'
|
||||
je @@dword
|
||||
dec si
|
||||
|
||||
@@word:
|
||||
push 16
|
||||
add si,3
|
||||
push cx
|
||||
retn
|
||||
|
||||
@@byte:
|
||||
push 8
|
||||
add si,3
|
||||
push cx
|
||||
retn
|
||||
|
||||
@@dword:
|
||||
push 32
|
||||
add si,3
|
||||
push cx
|
||||
retn
|
||||
|
||||
@@special2:
|
||||
cmp [byte ptr si+1],'\'
|
||||
jne @@notshowit2
|
||||
inc si
|
||||
jmp @@showit
|
||||
@@notshowit2:
|
||||
mov cl,[byte ptr si+1]
|
||||
cmp cl,'l'
|
||||
je @@showline
|
||||
cmp cl,'g'
|
||||
je @@goto
|
||||
cmp cl,'h'
|
||||
je @@gotox
|
||||
cmp cl,'c'
|
||||
je @@color
|
||||
cmp cl,'m'
|
||||
je @@setvideomode
|
||||
cmp cl,'e'
|
||||
je @@clearscreen
|
||||
cmp cl,'s'
|
||||
je @@savestate
|
||||
cmp cl,'r'
|
||||
je @@restorestate
|
||||
cmp cl,'i'
|
||||
je @@enablescroll
|
||||
cmp cl,'j'
|
||||
je @@disablescroll
|
||||
cmp cl,'f'
|
||||
je @@setfont
|
||||
clc
|
||||
jmp @@no0
|
||||
|
||||
@@color:
|
||||
mov al,[si+2]
|
||||
sub al,'0'
|
||||
shl al,4
|
||||
add al,[si+3]
|
||||
sub al,'0'
|
||||
xor ah,ah
|
||||
call [cs:setcolor],ax
|
||||
add si,4
|
||||
jmp @@strinaize0
|
||||
|
||||
@@gotox:
|
||||
mov bh,[si+2]
|
||||
sub bh,'0'
|
||||
mov bl,bh
|
||||
shl bl,3
|
||||
add bl,bh
|
||||
add bl,bh
|
||||
add bl,[si+3]
|
||||
sub bl,'0'
|
||||
xor bh,bh
|
||||
call [cs:getxy]
|
||||
xor ah,ah
|
||||
call [cs:setxy],bx,ax
|
||||
add si,4
|
||||
jmp @@strinaize0
|
||||
|
||||
@@setvideomode:
|
||||
mov ah,[si+2]
|
||||
sub ah,'0'
|
||||
mov al,ah
|
||||
shl al,3
|
||||
add al,ah
|
||||
add al,ah
|
||||
add al,[si+3]
|
||||
sub al,'0'
|
||||
xor ah,ah
|
||||
call [cs:setvideomode]
|
||||
add si,4
|
||||
jmp @@strinaize0
|
||||
|
||||
@@setfont:
|
||||
mov ah,[si+2]
|
||||
sub ah,'0'
|
||||
mov al,ah
|
||||
shl al,3
|
||||
add al,ah
|
||||
add al,ah
|
||||
add al,[si+3]
|
||||
sub al,'0'
|
||||
xor ah,ah
|
||||
call [cs:setfont],ax
|
||||
add si,4
|
||||
jmp @@strinaize0
|
||||
|
||||
@@showline:
|
||||
call [cs:addline]
|
||||
add si,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@clearscreen:
|
||||
call [cs:clearscreen]
|
||||
add si,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@savestate:
|
||||
mov ah,40
|
||||
int 47h
|
||||
add si,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@restorestate:
|
||||
mov ah,41
|
||||
int 47h
|
||||
add si,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@enablescroll:
|
||||
call [cs:enablescroll]
|
||||
add si,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@disablescroll:
|
||||
call [cs:disablescroll]
|
||||
add si,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@goto:
|
||||
mov ah,[si+2]
|
||||
sub ah,'0'
|
||||
mov al,ah
|
||||
shl al,3
|
||||
add al,ah
|
||||
add al,ah
|
||||
add al,[si+3]
|
||||
sub al,'0'
|
||||
xor ah,ah
|
||||
;
|
||||
mov bh,[si+5]
|
||||
sub bh,'0'
|
||||
mov bl,bh
|
||||
shl bl,3
|
||||
add bl,bh
|
||||
add bl,bh
|
||||
add bl,[si+6]
|
||||
sub bl,'0'
|
||||
xor bh,bh
|
||||
call [cs:setxy],ax,bx
|
||||
mov ah,25
|
||||
int 47h
|
||||
add si,7
|
||||
jmp @@strinaize0
|
||||
|
||||
@@no0:
|
||||
add di,bp
|
||||
mov ax,[ss:bp] ;BP
|
||||
mov bx,[ss:bp+2] ;IP
|
||||
mov cx,[ss:bp+4] ;CS
|
||||
mov [ss:di],ax
|
||||
mov [ss:di+2],bx
|
||||
mov [ss:di+4],cx
|
||||
mov bp,di
|
||||
pop di si cx bx ax
|
||||
mov sp,bp
|
||||
ret
|
||||
|
||||
ENDP print
|
||||
|
||||
|
||||
;================SHOWDATE==============
|
||||
;Affiche la date contenu en %0
|
||||
;-> %0
|
||||
;<-
|
||||
;======================================
|
||||
PROC showdate FAR
|
||||
ARG @dates:word
|
||||
USES edx
|
||||
xor edx,edx
|
||||
mov dx,[@dates]
|
||||
and dx,11111b
|
||||
call showintl,2,edx
|
||||
call [cs:showchar],'/',0FFFFh
|
||||
mov dx,[@dates]
|
||||
shr dx,5
|
||||
and dx,111b
|
||||
call showintl,2,edx
|
||||
call [cs:showchar],'/',0FFFFh
|
||||
mov dx,[@dates]
|
||||
shr dx,8
|
||||
and dx,11111111b
|
||||
add dx,1956
|
||||
call showintl,2,edx
|
||||
ret
|
||||
ENDP showdate
|
||||
|
||||
;================SHOWTIME==============
|
||||
;Affiche l'heure contenu en %0
|
||||
;-> %0
|
||||
;<-
|
||||
;======================================
|
||||
PROC showtime FAR
|
||||
ARG @times:word
|
||||
USES edx
|
||||
xor edx,edx
|
||||
mov dx,[@times]
|
||||
shr dx,11
|
||||
and dx,11111b
|
||||
call showintl,2,edx
|
||||
call [cs:showchar],':',0FFFFh
|
||||
mov dx,[@times]
|
||||
shr dx,5
|
||||
and dx,111111b
|
||||
call showintl,2,edx
|
||||
call [cs:showchar],':',0FFFFh
|
||||
mov dx,[@times]
|
||||
and dx,11111b
|
||||
shl dx,1
|
||||
call showintl,2,edx
|
||||
ret
|
||||
ENDP showtime
|
||||
|
||||
;================SHOWNAME==============
|
||||
;Affiche le nom pointé par ds:%0
|
||||
;-> ds:%0
|
||||
;<-
|
||||
;======================================
|
||||
PROC showname FAR
|
||||
ARG @thename:word
|
||||
USES cx,si
|
||||
mov si,[@thename]
|
||||
xor cx,cx
|
||||
@@showthename:
|
||||
call [cs:showchar],[word ptr ds:si],0FFFFh
|
||||
inc si
|
||||
inc cx
|
||||
cmp cx,8
|
||||
jne @@suiteaname
|
||||
call [cs:showchar],' ',0FFFFh
|
||||
@@suiteaname:
|
||||
cmp cx,8+3
|
||||
jb @@showthename
|
||||
ret
|
||||
ENDP showname
|
||||
|
||||
;================SHOWATTR==============
|
||||
;Affiche les attributs spécifié par %0
|
||||
;-> %0
|
||||
;<-
|
||||
;======================================
|
||||
PROC showattr FAR
|
||||
ARG @attr:word
|
||||
push 0FFFFh
|
||||
test [@attr],00000001b
|
||||
je @@noreadonly
|
||||
push 'L'
|
||||
jmp @@readonly
|
||||
@@noreadonly:
|
||||
push '-'
|
||||
@@readonly:
|
||||
call [cs:showchar]
|
||||
push 0FFFFh
|
||||
test [@attr],00000010b
|
||||
je @@nohidden
|
||||
push 'C'
|
||||
jmp @@hidden
|
||||
@@nohidden:
|
||||
push '-'
|
||||
@@hidden:
|
||||
call [cs:showchar]
|
||||
push 0FFFFh
|
||||
test [@attr],00000100b
|
||||
je @@nosystem
|
||||
push 'S'
|
||||
jmp @@system
|
||||
@@nosystem:
|
||||
push '-'
|
||||
@@system:
|
||||
call [cs:showchar]
|
||||
push 0FFFFh
|
||||
test [@attr],00100000b
|
||||
je @@noarchive
|
||||
push 'A'
|
||||
jmp @@archive
|
||||
@@noarchive:
|
||||
push '-'
|
||||
@@archive:
|
||||
call [cs:showchar]
|
||||
push 0FFFFh
|
||||
test [@attr],00010000b
|
||||
je @@nodirectory
|
||||
push 'R'
|
||||
jmp @@directory
|
||||
@@nodirectory:
|
||||
push '-'
|
||||
@@directory:
|
||||
call [cs:showchar]
|
||||
ret
|
||||
ENDP showattr
|
||||
|
||||
;================SHOWSIZE==============
|
||||
;Affiche le nom pointé par %0
|
||||
;-> %0
|
||||
;<-
|
||||
;======================================
|
||||
PROC showsize FAR
|
||||
ARG @thesize:dword
|
||||
USES edx,ds
|
||||
push cs
|
||||
pop ds
|
||||
mov edx,[@thesize]
|
||||
cmp edx,1073741824
|
||||
ja @@giga
|
||||
cmp edx,1048576*9
|
||||
ja @@mega
|
||||
cmp edx,1024*9
|
||||
ja @@kilo
|
||||
call showintr,4,edx
|
||||
call showstring0,offset unit
|
||||
jmp @@finsize
|
||||
@@kilo:
|
||||
shr edx,10
|
||||
call showintr,4,edx
|
||||
call showstring0,offset unitkilo
|
||||
jmp @@finsize
|
||||
@@mega:
|
||||
shr edx,20
|
||||
call showintr,4,edx
|
||||
call showstring0,offset unitmega
|
||||
jmp @@finsize
|
||||
@@giga:
|
||||
shr edx,30
|
||||
call showintr,4,edx
|
||||
call showstring0,offset unitgiga
|
||||
@@finsize:
|
||||
ret
|
||||
|
||||
unit db ' o ',0
|
||||
unitkilo db ' ko',0
|
||||
unitmega db ' mo',0
|
||||
unitgiga db ' go',0
|
||||
ENDP showsize
|
||||
|
||||
;==========SHOWSPACE===========
|
||||
;met un espace aprés le curseur
|
||||
;->
|
||||
;<-
|
||||
;==============================
|
||||
PROC showspace FAR
|
||||
call [cs:showchar],' ',0FFFFh
|
||||
clc
|
||||
ret
|
||||
ENDP showspace
|
||||
|
||||
|
||||
;==========SHOWINT===========
|
||||
;Affiche un entier %0 aprés le curseur
|
||||
;-> %0
|
||||
;<-
|
||||
;============================
|
||||
PROC showint FAR
|
||||
ARG @integer:dword
|
||||
USES eax,bx,cx,edx,esi
|
||||
xor cx,cx
|
||||
mov eax,[@integer]
|
||||
mov esi,10
|
||||
mov bx,offset showbuffer+27
|
||||
@@decint:
|
||||
xor edx,edx
|
||||
div esi
|
||||
add dl,'0'
|
||||
inc cx
|
||||
mov [cs:bx],dl
|
||||
dec bx
|
||||
cmp ax,0
|
||||
jne @@decint
|
||||
mov ax,cx
|
||||
@@showinteger:
|
||||
inc bx
|
||||
mov cl,[cs:bx]
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
dec ax
|
||||
jnz @@showinteger
|
||||
ret
|
||||
|
||||
showbuffer db 50 dup (0FFh)
|
||||
ENDP showint
|
||||
|
||||
;==========SHOWINTL===========
|
||||
;Affiche un entier %0 aprés le curseur de taille %1 caractère centré a gauche
|
||||
;-> %0 un entier % taille en caractères
|
||||
;<-
|
||||
;===============================
|
||||
PROC showintl FAR
|
||||
ARG @sizeofint:word,@integer:dword
|
||||
USES eax,bx,cx,edx,esi,di
|
||||
mov di,[@sizeofint]
|
||||
xor cx,cx
|
||||
mov eax,[@integer]
|
||||
mov esi,10
|
||||
mov bx,offset showbuffer+27
|
||||
@@decint:
|
||||
xor edx,edx
|
||||
div esi
|
||||
add dl,'0'
|
||||
inc cx
|
||||
mov [cs:bx],dl
|
||||
dec bx
|
||||
cmp cx,di
|
||||
jae @@nomuch
|
||||
cmp ax,0
|
||||
jne @@decint
|
||||
mov ax,di
|
||||
xchg cx,di
|
||||
sub cx,di
|
||||
@@rego:
|
||||
mov [byte ptr cs:bx],'0'
|
||||
dec bx
|
||||
dec cx
|
||||
jnz @@rego
|
||||
jmp @@finishim
|
||||
@@nomuch:
|
||||
mov ax,di
|
||||
@@finishim:
|
||||
@@showinteger:
|
||||
inc bx
|
||||
mov cl,[cs:bx]
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
dec ax
|
||||
jnz @@showinteger
|
||||
ret
|
||||
ENDP showintl
|
||||
|
||||
;==========SHOWINTR===========
|
||||
;Affiche un entier %0 aprés le curseur de taille %1 caractère centré a droite
|
||||
;-> %0 un entier % taille en caractères
|
||||
;<-
|
||||
;===============================
|
||||
PROC showintr FAR
|
||||
ARG @sizeofint:word,@integer:dword
|
||||
USES eax,bx,cx,edx,esi,di
|
||||
mov di,[@sizeofint]
|
||||
xor cx,cx
|
||||
mov eax,[@integer]
|
||||
mov esi,10
|
||||
mov bx,offset showbuffer+27
|
||||
@@decint:
|
||||
xor edx,edx
|
||||
div esi
|
||||
add dl,'0'
|
||||
inc cx
|
||||
mov [cs:bx],dl
|
||||
dec bx
|
||||
cmp cx,di
|
||||
jae @@nomuch
|
||||
cmp ax,0
|
||||
jne @@decint
|
||||
mov ax,di
|
||||
xchg cx,di
|
||||
sub cx,di
|
||||
@@rego:
|
||||
mov [byte ptr cs:bx],' '
|
||||
dec bx
|
||||
dec cx
|
||||
jnz @@rego
|
||||
jmp @@finishim
|
||||
@@nomuch:
|
||||
mov ax,di
|
||||
@@finishim:
|
||||
@@showinteger:
|
||||
inc bx
|
||||
mov cl,[cs:bx]
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
dec ax
|
||||
jnz @@showinteger
|
||||
ret
|
||||
ENDP showintr
|
||||
|
||||
;==========SHOWSIGNED===========
|
||||
;Affiche un entier %0 de taille %1 aprés le curseur
|
||||
;-> %0 un entier, %1 la taille
|
||||
;<-
|
||||
;===============================
|
||||
PROC showsigned FAR
|
||||
ARG @sizeofint:word,@integer:dword=taille
|
||||
USES ebx,cx,edx
|
||||
mov ebx,[@integer]
|
||||
mov cx,[@sizeofint]
|
||||
xor edx,edx
|
||||
cmp cx,1
|
||||
ja @@signed16
|
||||
mov dl,bl
|
||||
cmp dl,7Fh
|
||||
jbe @@notsigned
|
||||
neg dl
|
||||
jmp @@showminus
|
||||
@@signed16:
|
||||
cmp cx,2
|
||||
ja @@signed32
|
||||
mov dx,bx
|
||||
cmp dx,7FFFh
|
||||
jbe @@notsigned
|
||||
neg dx
|
||||
jmp @@showminus
|
||||
@@signed32:
|
||||
mov edx,ebx
|
||||
cmp edx,7FFFFFFFh
|
||||
jbe @@notsigned
|
||||
neg edx
|
||||
@@showminus:
|
||||
call [cs:showchar],'-',0FFFFh
|
||||
@@notsigned:
|
||||
call showint,edx,0FFFFh
|
||||
ret
|
||||
ENDP showsigned
|
||||
|
||||
;==========SHOWHEX===========
|
||||
;Affiche un nombre hexadécimal %0 de taille %1 aprés le curseur
|
||||
;-> %0 un entier, %1 la taille
|
||||
;<-
|
||||
;============================
|
||||
PROC showhex FAR
|
||||
ARG @sizeofint:word,@integer:dword=taille
|
||||
USES ax,bx,cx,edx
|
||||
mov edx,[@integer]
|
||||
mov cx,[@sizeofint]
|
||||
mov ax,cx
|
||||
shr ax,2
|
||||
sub cx,32
|
||||
neg cx
|
||||
shl edx,cl
|
||||
@@Hexaize:
|
||||
rol edx,4
|
||||
mov bx,dx
|
||||
and bx,0fh
|
||||
mov cl,[cs:bx+offset Tab]
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
dec al
|
||||
jnz @@Hexaize
|
||||
ret
|
||||
|
||||
Tab db '0123456789ABCDEF'
|
||||
ENDP showhex
|
||||
|
||||
;==========SHOWBIN===========
|
||||
;Affiche un nombre binaire %0 de taille %1 aprés le curseur
|
||||
;-> %0 un entier, %1 la taille
|
||||
;<-
|
||||
;============================
|
||||
PROC showbin FAR
|
||||
ARG @sizeofint:word,@integer:dword=taille
|
||||
USES ax,cx,edx
|
||||
mov edx,[@integer]
|
||||
mov cx,[@sizeofint]
|
||||
sub cx,32
|
||||
neg cx
|
||||
shl edx,cl
|
||||
mov ax,[@sizeofint]
|
||||
@@binaize:
|
||||
rol edx,1
|
||||
mov cl,'0'
|
||||
adc cl,0
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
dec al
|
||||
jnz @@binaize
|
||||
ret
|
||||
ENDP showbin
|
||||
|
||||
;==========SHOWBCD===========
|
||||
;Affiche un nombre en BCD %0 de taille %1 aprés le curseur
|
||||
;-> %0 un entier, %1 la taille
|
||||
;<-
|
||||
;============================
|
||||
PROC showbcd FAR
|
||||
ARG @sizeofint:word,@integer:dword
|
||||
USES ax,cx,edx
|
||||
mov edx,[@integer]
|
||||
mov ax,[@sizeofint]
|
||||
mov cx,ax
|
||||
shr ax,2
|
||||
sub cx,32
|
||||
neg cx
|
||||
shl edx,cl
|
||||
@@BCDaize:
|
||||
rol edx,4
|
||||
mov cl,dl
|
||||
and cl,0fh
|
||||
add cl,'0'
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
dec al
|
||||
jnz @@BCDaize
|
||||
ret
|
||||
ENDP showbcd
|
||||
|
||||
;==========SHOWSTRING===========
|
||||
;Affiche une chaine de caractère pointée par ds:%1 aprés le curseur
|
||||
;-> ds:%1 pointeur chaine type pascal
|
||||
;<-
|
||||
;===============================
|
||||
PROC showstring FAR
|
||||
ARG @pointer:word
|
||||
USES bx,si
|
||||
mov si,[@pointer]
|
||||
mov bl,[si]
|
||||
@@strinaize:
|
||||
inc si
|
||||
call [cs:showchar],[word ptr si],0FFFFh
|
||||
dec bl
|
||||
jnz @@strinaize
|
||||
ret
|
||||
ENDP showstring
|
||||
|
||||
;==========SHOWSTRING0===========
|
||||
;Affiche une chaine de caractère pointée par ds:%1 aprés le curseur
|
||||
;-> ds:%1 pointeur chaine type zéro terminal
|
||||
;<-
|
||||
;================================
|
||||
PROC showstring0 FAR
|
||||
ARG @pointer:word
|
||||
USES cx,si
|
||||
mov si,[@pointer]
|
||||
@@strinaize0:
|
||||
mov cl,[si]
|
||||
cmp cl,0
|
||||
je @@no0
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
inc si
|
||||
jmp @@strinaize0
|
||||
@@no0:
|
||||
ret
|
||||
ENDP showstring0
|
||||
|
331
noyau/8259a.asm
331
noyau/8259a.asm
@ -1,64 +1,11 @@
|
||||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
start:
|
||||
jmp tsr
|
||||
db 'PIC8259A'
|
||||
Tsr:
|
||||
cli
|
||||
cmp ax,1234h
|
||||
jne nomore
|
||||
mov ax,4321h
|
||||
jmp itsok
|
||||
nomore:
|
||||
push bx
|
||||
mov bl,ah
|
||||
xor bh,bh
|
||||
shl bx,1
|
||||
mov bx,cs:[bx].tables
|
||||
mov cs:current,bx
|
||||
pop bx
|
||||
call cs:current
|
||||
itsok:
|
||||
jnc noerror
|
||||
push bp
|
||||
mov bp,sp
|
||||
or byte ptr [bp+6],1b
|
||||
pop bp
|
||||
mov ax,cs
|
||||
shl eax,16
|
||||
mov ax,cs:current
|
||||
jmp endofint
|
||||
noerror:
|
||||
push bp
|
||||
mov bp,sp
|
||||
and byte ptr [bp+6],0FEh
|
||||
pop bp
|
||||
endofint:
|
||||
sti
|
||||
iret
|
||||
current dw 0
|
||||
tables dw enableirq
|
||||
dw disableirq
|
||||
dw readmaskirq
|
||||
dw readirr
|
||||
dw readisr
|
||||
dw installhandler
|
||||
dw replacehandler
|
||||
dw getint
|
||||
dw setint
|
||||
dw seteoi
|
||||
|
||||
;Adresses de port du contr“leur IRQ
|
||||
MASTERPIC = 020h ;Adresse de base du PIC maŒtre
|
||||
SLAVEPIC = 0A0h ;Adresse de base du PIC esclave
|
||||
IRQMASK = 001h ;Offset sur port de masquage
|
||||
MASTERPIC = 020h ;Adresse de base du PIC maŒtre
|
||||
SLAVEPIC = 0A0h ;Adresse de base du PIC esclave
|
||||
IRQMASK = 001h ;Offset sur port de masquage
|
||||
|
||||
;Commandes IRQ OCW2
|
||||
DISABLEROTATION = 000h ;Desactiver la rotation de priorités en mode EOI automatique
|
||||
EOI = 020h ;End of Interrupt non sp‚cifi‚
|
||||
DISABLEROTATION = 000h ;Desactiver la rotation de priorités en mode EOI automatique
|
||||
EOI = 020h ;End of Interrupt non sp‚cifi‚
|
||||
COMMANDEOI = 060h ;Commande EOI particulière
|
||||
ENABLEROTATION = 080h ;Activer la rotation de priorités en mode EOI automatique
|
||||
ROTATIONNOSPEC = 0A0h ;Rotation des priorités en mode EOI automatique
|
||||
@ -66,176 +13,130 @@ tables dw enableirq
|
||||
ROTATIONSPEC = 0E0h ;Rotation des priorités en mode EOI spécifié
|
||||
|
||||
;Position des vecteurs d'interruptions
|
||||
MASTERFIRSTVECTOR = 008h ;Vecteurs logiciels des interruptions
|
||||
SLAVEFIRSTVECTOR = 070h ;‚lectroniques
|
||||
MASTERFIRSTVECTOR = 008h ;Vecteurs logiciels des interruptions
|
||||
SLAVEFIRSTVECTOR = 070h ;‚lectroniques
|
||||
|
||||
;OCW3 codes registres
|
||||
IRR = 002h ;Interrupt Request Register
|
||||
ISR = 003h ;In Service Register
|
||||
;OCW3 et modes
|
||||
;OCW3 et modes
|
||||
OCW3 = 008h ;OCW3
|
||||
POLLING = 004h ;Polling bit
|
||||
|
||||
|
||||
ISR = 0Bh ; Pas d'op‚ration, pas de Poll, lire ISR OCW3
|
||||
IRR = 0Ah ; Pas d'op‚ration, pas de Poll, lire IRR
|
||||
|
||||
IRR = 0Ah ; Pas d'op‚ration, pas de Poll, lire IRR
|
||||
|
||||
;Autorise une interruption ‚lectronique
|
||||
;Entr‚e : AL - Num‚ro de l'interruption (0-15) … autoriser 0-7 = MASTERPIC , 8-15 = SLAVEPIC
|
||||
EnableIRQ:
|
||||
push ax cx dx
|
||||
mov dx,MASTERPIC+IRQMASK
|
||||
cmp al,7
|
||||
jbe master
|
||||
mov dx,SLAVEPIC+IRQMASK
|
||||
master:
|
||||
mov cl,al
|
||||
and cl,7
|
||||
mov al,1
|
||||
shl al,cl
|
||||
not al
|
||||
mov ah,al
|
||||
in al,dx
|
||||
and al,ah
|
||||
out dx,al
|
||||
pop dx cx ax
|
||||
ret
|
||||
;Entr‚e : %1 - Num‚ro de l'interruption (0-15) … autoriser 0-7 = MASTERPIC , 8-15 = SLAVEPIC
|
||||
PROC enableirq FAR
|
||||
ARG @irq:word
|
||||
USES ax,cx,dx
|
||||
mov ax,[@irq]
|
||||
mov dx,MASTERPIC+IRQMASK
|
||||
cmp al,7
|
||||
jbe @@master
|
||||
mov dx,SLAVEPIC+IRQMASK
|
||||
@@master:
|
||||
mov cl,al
|
||||
and cl,7
|
||||
mov al,1
|
||||
shl al,cl
|
||||
not al
|
||||
mov ah,al
|
||||
in al,dx
|
||||
and al,ah
|
||||
out dx,al
|
||||
ret
|
||||
endp enableirq
|
||||
|
||||
;Desactive une interruption ‚lectronique
|
||||
;Entr‚e : AL - Num‚ro de l'interruption (0-15) … desactiver 0-7 = MASTERPIC , 8-15 = SLAVEPIC
|
||||
DisableIRQ:
|
||||
push ax cx dx
|
||||
mov dx,MASTERPIC+IRQMASK
|
||||
cmp al,7
|
||||
jbe master2
|
||||
mov dx,SLAVEPIC+IRQMASK
|
||||
master2:
|
||||
mov cl,al
|
||||
and cl,7
|
||||
mov al,1
|
||||
shl al,cl
|
||||
mov ah,al
|
||||
in al,dx
|
||||
or al,ah
|
||||
out dx,al
|
||||
pop dx cx ax
|
||||
ret
|
||||
;Entr‚e : %0 - Num‚ro de l'interruption (0-15) … desactiver 0-7 = MASTERPIC , 8-15 = SLAVEPIC
|
||||
PROC disableirq FAR
|
||||
ARG @irq:word
|
||||
USES ax,cx,dx
|
||||
mov ax,[@irq]
|
||||
mov dx,MASTERPIC+IRQMASK
|
||||
cmp al,7
|
||||
jbe @@master
|
||||
mov dx,SLAVEPIC+IRQMASK
|
||||
@@master:
|
||||
mov cl,al
|
||||
and cl,7
|
||||
mov al,1
|
||||
shl al,cl
|
||||
not al
|
||||
mov ah,al
|
||||
in al,dx
|
||||
or al,ah
|
||||
out dx,al
|
||||
ret
|
||||
endp disableirq
|
||||
|
||||
|
||||
;Signale "End Of Interrupt" de l'interruption %0
|
||||
PROC seteoi FAR
|
||||
ARG @irq:word
|
||||
USES ax,dx
|
||||
mov ax,[@irq]
|
||||
cmp al,7
|
||||
jbe @@master
|
||||
mov al,EOI
|
||||
out SLAVEPIC,al
|
||||
@@master:
|
||||
mov al,EOI
|
||||
out MASTERPIC,al
|
||||
ret
|
||||
endp seteoi
|
||||
|
||||
|
||||
;Lit les masques d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1
|
||||
PROC readmaskirq FAR
|
||||
ARG @controleur:word
|
||||
USES bx,dx
|
||||
mov bx,[@controleur]
|
||||
mov dx,MASTERPIC+ IRQMASK
|
||||
cmp bl,0
|
||||
jne @@master
|
||||
mov dx,SLAVEPIC+ IRQMASK
|
||||
@@master:
|
||||
xor ah,ah
|
||||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
endp readmaskirq
|
||||
|
||||
;Lit le registre d'‚tat d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1
|
||||
PROC readisr FAR
|
||||
ARG @controleur:word
|
||||
USES bx,dx
|
||||
mov bx,[@controleur]
|
||||
mov dx,MASTERPIC
|
||||
cmp bh,0
|
||||
jne @@master
|
||||
mov dx,SLAVEPIC
|
||||
@@master:
|
||||
mov al,ISR
|
||||
out dx,al
|
||||
xor ah,ah
|
||||
in al,dx
|
||||
ret
|
||||
endp readisr
|
||||
|
||||
;Signale "End Of Interrupt" de l'interruption al
|
||||
SetEOI:
|
||||
push ax dx
|
||||
cmp al,7
|
||||
jbe master3
|
||||
mov al,EOI
|
||||
out SLAVEPIC,al
|
||||
master3:
|
||||
mov al,EOI
|
||||
out MASTERPIC,al
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
;Lit les masques d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
|
||||
ReadmaskIrq:
|
||||
push dx
|
||||
mov dx,MASTERPIC+ IRQMASK
|
||||
cmp bh,0
|
||||
jne Master5
|
||||
mov dx,SLAVEPIC+ IRQMASK
|
||||
master5:
|
||||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
|
||||
;Lit le registre d'‚tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
|
||||
ReadISR:
|
||||
push dx
|
||||
mov dx,MASTERPIC
|
||||
cmp bh,0
|
||||
jne Master6
|
||||
mov dx,SLAVEPIC
|
||||
master6:
|
||||
mov al,isr
|
||||
out dx,al
|
||||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
|
||||
;Lit le registre d'‚tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
|
||||
ReadIRR:
|
||||
push dx
|
||||
mov dx,MASTERPIC
|
||||
cmp bh,0
|
||||
jne Master7
|
||||
mov dx,SLAVEPIC
|
||||
master7:
|
||||
mov al,irr
|
||||
out dx,al
|
||||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
|
||||
;remplace le handler pointer par ds:si en bx:100h interruption ax
|
||||
replacehandler:
|
||||
push ax bx cx si di ds es
|
||||
mov es,bx
|
||||
mov di,0100h
|
||||
mov ah,4
|
||||
int 48h
|
||||
jc reph
|
||||
mov bx,ax
|
||||
call getint
|
||||
mov es:[102h],si
|
||||
mov es:[104h],ds
|
||||
call setint
|
||||
reph:
|
||||
pop es ds di si cx bx ax
|
||||
ret
|
||||
|
||||
;install le handler pointer par ds:si en bx:100h interruption ax
|
||||
installhandler:
|
||||
push bx cx di es
|
||||
mov es,bx
|
||||
mov di,100h
|
||||
mov ah,4
|
||||
int 48h
|
||||
jc inh
|
||||
mov bx,ax
|
||||
call setint
|
||||
inh:
|
||||
pop es di cx bx
|
||||
ret
|
||||
|
||||
;met es:di le handle de l'int al
|
||||
setint:
|
||||
push ax bx ds
|
||||
call disableirq
|
||||
cli
|
||||
xor ah,ah
|
||||
mov bx,ax
|
||||
shl bx,2
|
||||
xor ax,ax
|
||||
mov ds,ax
|
||||
mov ds:[bx],di
|
||||
mov ds:[bx+2],es
|
||||
pop ds bx ax
|
||||
sti
|
||||
call enableirq
|
||||
ret
|
||||
|
||||
;met ds:si le handle de l'int al
|
||||
getint:
|
||||
push ax bx es
|
||||
xor ah,ah
|
||||
mov bx,ax
|
||||
shl bx,2
|
||||
xor ax,ax
|
||||
mov es,ax
|
||||
mov si,es:[bx]
|
||||
mov ds,es:[bx+2]
|
||||
pop es bx ax
|
||||
ret
|
||||
|
||||
|
||||
end start
|
||||
|
||||
PROC readirr FAR
|
||||
ARG @controleur:word
|
||||
USES bx,dx
|
||||
mov bx,[@controleur]
|
||||
mov dx,MASTERPIC
|
||||
cmp bh,0
|
||||
jne @@master
|
||||
mov dx,SLAVEPIC
|
||||
@@master:
|
||||
mov al,IRR
|
||||
out dx,al
|
||||
xor ah,ah
|
||||
in al,dx
|
||||
ret
|
||||
endp readirr
|
@ -1,67 +1,36 @@
|
||||
lnk_boot = tlink /x
|
||||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
asm= lzasm
|
||||
lnk= elink
|
||||
|
||||
all: boot.bin clavier.sys 8259a.sys disque.sys heure.sys horloge.sys manette.sys port.sys souris.sys systeme.sys video.sys
|
||||
all: systeme.sys boot.bin
|
||||
|
||||
boot.bin: boot.asm
|
||||
$(asm) boot
|
||||
$(lnk_boot) boot
|
||||
exe2boot boot.exe boot.bin
|
||||
systeme.sys: video.obj systeme.obj
|
||||
$(lnk) systeme.obj systeme.sys
|
||||
|
||||
clavier.sys: clavier.asm
|
||||
$(asm) clavier
|
||||
$(lnk) clavier
|
||||
ren clavier.com clavier.sys
|
||||
systeme.obj: ../lib/detect.lib ../lib/video.lib video.sys
|
||||
$(asm) systeme.asm
|
||||
|
||||
8259a.sys: 8259a.asm
|
||||
$(asm) 8259a
|
||||
$(lnk) 8259a
|
||||
ren 8259a.com 8259a.sys
|
||||
|
||||
disque.sys: disque.asm
|
||||
$(asm) disque
|
||||
$(lnk) disque
|
||||
ren disque.com disque.sys
|
||||
video.sys:
|
||||
$(lnk) video.obj video.sys
|
||||
|
||||
heure.sys: heure.asm
|
||||
$(asm) heure
|
||||
$(lnk) heure
|
||||
ren heure.com heure.sys
|
||||
boot.bin: boot.obj
|
||||
$(lnk) boot.obj boot.bin /bs
|
||||
|
||||
horloge.sys: horloge.asm
|
||||
$(asm) horloge
|
||||
$(lnk) horloge
|
||||
ren horloge.com horloge.sys
|
||||
detect.obj:
|
||||
$(asm) detect.asm
|
||||
|
||||
manette.sys: manette.asm
|
||||
$(asm) manette
|
||||
$(lnk) manette
|
||||
ren manette.com manette.sys
|
||||
video.obj:
|
||||
$(asm) video.asm
|
||||
|
||||
port.sys: port.asm
|
||||
$(asm) port
|
||||
$(lnk) port
|
||||
ren port.com port.sys
|
||||
|
||||
souris.sys: souris.asm
|
||||
$(asm) souris
|
||||
$(lnk) souris
|
||||
ren souris.com souris.sys
|
||||
|
||||
systeme.sys: systeme.asm
|
||||
$(asm) systeme
|
||||
$(lnk) systeme
|
||||
ren systeme.com systeme.sys
|
||||
|
||||
video.sys: video.asm
|
||||
$(asm) video
|
||||
$(lnk) video
|
||||
ren video.com video.sys
|
||||
boot.obj:
|
||||
$(asm) boot.asm
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.bak
|
||||
del *.lib
|
||||
del *.com
|
||||
del *.bin
|
||||
del *.sys
|
||||
del *.err
|
||||
del *.err
|
377
noyau/boot.asm
377
noyau/boot.asm
@ -1,221 +1,216 @@
|
||||
boots segment
|
||||
.386
|
||||
org 7C00h
|
||||
;org 100h
|
||||
assume cs:boots,ds:boots
|
||||
model tiny,stdcall
|
||||
p486
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\fat.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 7C00h
|
||||
|
||||
start:
|
||||
jmp boot
|
||||
|
||||
bootdb db 'COS2000A' ;Fabricant + n°série Formatage
|
||||
sizec dw 512 ;octet/secteur
|
||||
db 1 ;secteur/cluster
|
||||
reserv dw 1 ;secteur reserv‚
|
||||
nbfat db 2 ;nb de copie de la FAT
|
||||
nbfit dw 224 ;taille rep racine
|
||||
allclu dw 2880 ;nb secteur du volume si < 32 még
|
||||
db 0F0h ;Descripteur de média
|
||||
fatsize dw 9 ;secteur/FAT
|
||||
nbtrack dw 18 ;secteur/piste
|
||||
head dw 2 ;nb de tˆteb de lecture/écriture
|
||||
hidden dd 0 ;nombre de secteur cach‚s
|
||||
dd 0 ;si nbsecteur = 0 nbsect ; the number of sectors
|
||||
bootdrv db 0 ;Lecteur de d‚marrage
|
||||
bootsig db 0 ;NA
|
||||
db 29h ;boot signature 29h
|
||||
bootsig2 dd 01020304h ;no de serie
|
||||
pope db 'COS2000 ' ;nom de volume
|
||||
db 'FAT12 ' ;FAT
|
||||
specialboot:
|
||||
bootsec bootinfo <"COS2000A",512,1,1,2,224,2880,0F0h,9,18,2,0,0,0,0,0,29h,01020304h,"COS2000 ","FAT12 ">
|
||||
|
||||
errorloading db " [Erreur]",0dh,0ah,0
|
||||
okloading db "Recherche noyau ",0Dh,0ah," -"
|
||||
sys db "SYSTEME SYS",0
|
||||
syst db " [ Ok ]",0dh,0ah,"Chargement ",0
|
||||
dot db ".",0
|
||||
|
||||
|
||||
errorloading db ' Erreur !!',0dh,0ah,0
|
||||
okloading db 'Recherche noyau',0Dh,0ah,' - system.sys',0
|
||||
syst db ' Ok',0dh,0ah,'Chargement',0
|
||||
dot db '.',0
|
||||
Sys db 'SYSTEME SYS'
|
||||
|
||||
errorboot:
|
||||
mov si,offset errorloading
|
||||
call showstr
|
||||
mov ah,0
|
||||
int 16h
|
||||
int 19h
|
||||
boot:
|
||||
mov Bootdrv,dl
|
||||
cli
|
||||
mov ax,09000h
|
||||
mov ss,ax
|
||||
mov sp,0FFFFh
|
||||
sti
|
||||
mov si,offset errorloading
|
||||
call showstr
|
||||
mov ah,0
|
||||
int 16h
|
||||
int 19h
|
||||
|
||||
boot:
|
||||
mov [bootsec.bootdrive],dl
|
||||
cli
|
||||
mov ax,09000h
|
||||
mov ss,ax
|
||||
mov sp,0FFFFh
|
||||
sti
|
||||
boot2:
|
||||
push cs
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
xor ax,ax
|
||||
int 13h
|
||||
jc errorboot
|
||||
mov si,offset okloading
|
||||
call showstr
|
||||
mov cx,Reserv
|
||||
add cx,word ptr [offset Hidden]
|
||||
adc cx,word ptr [offset Hidden+2]
|
||||
push cx
|
||||
mov bx,fatsize
|
||||
mov di,offset bufferfat
|
||||
push cs
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
xor ax,ax
|
||||
mov dl,[bootsec.bootdrive]
|
||||
int 13h
|
||||
jc errorboot
|
||||
mov si,offset okloading
|
||||
call showstr
|
||||
mov cx,[bootsec.reservedsectors]
|
||||
add cx,[bootsec.hiddensectorsh]
|
||||
adc cx,[bootsec.hiddensectorsl]
|
||||
push cx
|
||||
mov bx,[bootsec.sectorsperfat]
|
||||
mov di,offset bufferfat
|
||||
readfat:
|
||||
call readsector
|
||||
inc cx
|
||||
add di,sizec
|
||||
dec bx
|
||||
jnz readfat
|
||||
pop cx
|
||||
xor ax,ax
|
||||
mov al,NbFat
|
||||
mov bx,FatSize
|
||||
mul bx
|
||||
add cx,ax
|
||||
mov ax,32
|
||||
mul nbfit
|
||||
div sizec
|
||||
add ax,cx
|
||||
sub ax,2
|
||||
mov word ptr [offset bootsig],ax
|
||||
xor dx,dx
|
||||
CheckRoot:
|
||||
mov di,offset buffer
|
||||
call readsector
|
||||
jc errorboot
|
||||
xor bx,bx
|
||||
call readsector
|
||||
jc errorboot
|
||||
inc cx
|
||||
add di,[bootsec.sectorsize]
|
||||
dec bx
|
||||
jnz readfat
|
||||
pop cx
|
||||
xor ax,ax
|
||||
mov al,[bootsec.fatsperdrive]
|
||||
mov bx,[bootsec.sectorsperfat]
|
||||
mul bx
|
||||
add cx,ax
|
||||
mov ax,32
|
||||
mul [bootsec.directorysize]
|
||||
div [bootsec.sectorsize]
|
||||
add ax,cx
|
||||
sub ax,2
|
||||
mov [word ptr bootsec.reservedfornt],ax
|
||||
xor dx,dx
|
||||
checkroot:
|
||||
mov di,offset buffer
|
||||
call readsector
|
||||
jc errorboot
|
||||
xor bx,bx
|
||||
findnext:
|
||||
cmp byte ptr [di],0
|
||||
je errorboot
|
||||
cmp byte ptr [di],0E5h
|
||||
je no
|
||||
cmp byte ptr [di],041h
|
||||
je no
|
||||
mov si,offset dot
|
||||
call showstr
|
||||
push di cx
|
||||
mov si,offset sys
|
||||
mov cx,11
|
||||
rep cmpsb
|
||||
pop cx di
|
||||
je oksystem
|
||||
cmp [byte ptr di],0
|
||||
je errorboot
|
||||
cmp [byte ptr di],0E5h
|
||||
je no
|
||||
cmp [byte ptr di],041h
|
||||
je no
|
||||
mov si,offset dot
|
||||
call showstr
|
||||
push di cx
|
||||
mov si,offset sys
|
||||
mov cx,11
|
||||
rep cmpsb
|
||||
pop cx di
|
||||
je oksystem
|
||||
no:
|
||||
add di,32
|
||||
add bx,32
|
||||
inc dx
|
||||
cmp dx,nbfit
|
||||
ja errorboot
|
||||
cmp bx,sizec
|
||||
jb findnext
|
||||
inc cx
|
||||
jmp Checkroot
|
||||
add di,32
|
||||
add bx,32
|
||||
inc dx
|
||||
cmp dx,[bootsec.directorysize]
|
||||
ja errorboot
|
||||
cmp bx,[bootsec.sectorsize]
|
||||
jb findnext
|
||||
inc cx
|
||||
jmp checkroot
|
||||
oksystem:
|
||||
mov si,offset syst
|
||||
call showstr
|
||||
mov cx,[di+26]
|
||||
mov ax,0900h
|
||||
mov es,ax
|
||||
push es
|
||||
mov di,100h
|
||||
push di
|
||||
mov si,offset dot
|
||||
xor ax,ax
|
||||
mov si,offset syst
|
||||
call showstr
|
||||
mov cx,[di+26]
|
||||
mov ax,0900h
|
||||
mov es,ax
|
||||
push es
|
||||
mov di,0000h
|
||||
push 0010h
|
||||
mov si,offset dot
|
||||
xor ax,ax
|
||||
fatagain:
|
||||
cmp cx,0FF0h
|
||||
jae finishload
|
||||
push cx
|
||||
add cx,word ptr [offset bootsig]
|
||||
call readsector
|
||||
pop cx
|
||||
jc errorboot
|
||||
cmp cx,0FF0h
|
||||
jae finishload
|
||||
push cx
|
||||
add cx,[word ptr bootsec.reservedfornt]
|
||||
call readsector
|
||||
pop cx
|
||||
jc errorboot
|
||||
inc ax
|
||||
call showstr
|
||||
add di,sizec
|
||||
call getfat
|
||||
jnc fatagain
|
||||
call showstr
|
||||
add di,[bootsec.sectorsize]
|
||||
call getfat
|
||||
jnc fatagain
|
||||
finishload:
|
||||
db 0CBh
|
||||
retf
|
||||
|
||||
;=============READSECTOR (Fonction 01H)===============
|
||||
;Lit le secteur CX et le met en es:di
|
||||
;-> AH=1
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
ReadSector:
|
||||
readsector:
|
||||
push ax bx cx dx si
|
||||
mov ax,cx
|
||||
xor dx,dx
|
||||
div nbtrack
|
||||
inc dl
|
||||
mov bl,dl
|
||||
xor dx,dx
|
||||
div head
|
||||
mov dh, 0
|
||||
xchg dl,dh
|
||||
mov cx,ax
|
||||
xchg cl,ch
|
||||
shl cl,6
|
||||
or cl, bl
|
||||
xor dx,dx
|
||||
div [bootsec.sectorspertrack]
|
||||
inc dl
|
||||
mov bl,dl
|
||||
xor dx,dx
|
||||
div [bootsec.headsperdrive]
|
||||
xchg dl,dh
|
||||
mov cx,ax
|
||||
xchg cl,ch
|
||||
shl cl,6
|
||||
or cl, bl
|
||||
mov bx,di
|
||||
mov SI, 4
|
||||
mov AL, 1
|
||||
TryAgain:
|
||||
mov AH, 2
|
||||
mov si, 4
|
||||
mov al, 1
|
||||
tryagain:
|
||||
mov ah, 2
|
||||
mov dl,[bootsec.bootdrive]
|
||||
int 13h
|
||||
jnc Done
|
||||
dec SI
|
||||
jnz TryAgain
|
||||
Done:
|
||||
jnc done
|
||||
dec si
|
||||
jnz tryagain
|
||||
done:
|
||||
pop si dx cx bx ax
|
||||
ret
|
||||
|
||||
getfat:
|
||||
push ax bx dx di
|
||||
mov di,offset bufferfat
|
||||
mov ax,cx
|
||||
mov bx,ax
|
||||
and bx,0000000000000001b
|
||||
shr ax,1
|
||||
mov cx,3
|
||||
mul cx
|
||||
add di,ax
|
||||
cmp bx,0h
|
||||
jnz evenfat
|
||||
oddfat:
|
||||
mov dx,[di]
|
||||
and dx,0FFFh
|
||||
mov cx,dx
|
||||
jmp endfat
|
||||
evenfat:
|
||||
mov dx,[di+1]
|
||||
and dx,0FFF0h
|
||||
shr dx,4
|
||||
mov cx,dx
|
||||
endfat:
|
||||
pop di dx bx ax
|
||||
ret
|
||||
|
||||
showstr:
|
||||
push ax bx si
|
||||
again:
|
||||
lodsb
|
||||
or al,al
|
||||
jz fin
|
||||
mov ah,0Eh
|
||||
mov bx,07h
|
||||
int 10h
|
||||
jmp again
|
||||
fin:
|
||||
pop si bx ax
|
||||
ret
|
||||
|
||||
Buffer equ $
|
||||
BufferFat equ $+2048
|
||||
|
||||
boots ends
|
||||
end start
|
||||
getfat:
|
||||
push ax bx dx di
|
||||
mov di,offset bufferfat
|
||||
mov ax,cx
|
||||
mov bx,ax
|
||||
and bx,0000000000000001b
|
||||
shr ax,1
|
||||
mov cx,3
|
||||
mul cx
|
||||
add di,ax
|
||||
cmp bx,0h
|
||||
jnz evenfat
|
||||
oddfat:
|
||||
mov dx,[di]
|
||||
and dx,0FFFh
|
||||
mov cx,dx
|
||||
jmp endfat
|
||||
evenfat:
|
||||
mov dx,[di+1]
|
||||
and dx,0FFF0h
|
||||
shr dx,4
|
||||
mov cx,dx
|
||||
endfat:
|
||||
pop di dx bx ax
|
||||
ret
|
||||
|
||||
|
||||
showstr:
|
||||
push ax bx si
|
||||
again:
|
||||
lodsb
|
||||
or al,al
|
||||
jz fin
|
||||
mov ah,0Eh
|
||||
mov bx,07h
|
||||
int 10h
|
||||
jmp again
|
||||
fin:
|
||||
pop si bx ax
|
||||
ret
|
||||
|
||||
|
||||
db 055h,0AAh
|
||||
|
||||
endof:
|
||||
|
||||
buffer equ offset endof+2048
|
||||
bufferfat equ offset endof+4096
|
||||
|
||||
|
@ -3,7 +3,9 @@
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
|
||||
@ -15,35 +17,49 @@ tsr:
|
||||
db 2eh,0ffh,1eh
|
||||
dw offsets
|
||||
cli
|
||||
mov cs:feax,eax
|
||||
in al,60h
|
||||
cmp cs:isstate,1
|
||||
jne nostate
|
||||
cmp al,57
|
||||
jne endof
|
||||
mov cs:isstate,0
|
||||
jmp endof
|
||||
nostate:
|
||||
je endofforce
|
||||
mov cs:isstate,1
|
||||
mov cs:eaxr,eax
|
||||
in al,60h
|
||||
cmp al,68
|
||||
je F10
|
||||
cmp al,87
|
||||
je F11
|
||||
cmp al,88
|
||||
je F12
|
||||
endof:
|
||||
mov eax,cs:feax
|
||||
endof:
|
||||
mov cs:isstate,0
|
||||
mov eax,cs:eaxr
|
||||
endofforce:
|
||||
sti
|
||||
iret
|
||||
isstate db 0
|
||||
infos db 40 dup (0)
|
||||
feax dd 0
|
||||
|
||||
F10:
|
||||
mov ax,6000h
|
||||
push ax
|
||||
mov di,0100h
|
||||
push di
|
||||
sti
|
||||
db 0CBh
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset com
|
||||
mov ah,5
|
||||
int 49h
|
||||
pop ax
|
||||
pop ax
|
||||
pop ax
|
||||
push gs
|
||||
push gs
|
||||
push gs
|
||||
pop ds
|
||||
pop es
|
||||
pop fs
|
||||
push gs
|
||||
push size exe
|
||||
sti
|
||||
mov cs:[isstate],0
|
||||
retf
|
||||
|
||||
com db 'COMMANDE.CE',0
|
||||
|
||||
F11:
|
||||
push ax di es
|
||||
@ -65,154 +81,181 @@ notabove:
|
||||
|
||||
|
||||
f12:
|
||||
mov cs:isstate,1
|
||||
pop word ptr cs:fip
|
||||
pop word ptr cs:fcs
|
||||
pop dword ptr cs:ffl
|
||||
mov cs:fesp,esp
|
||||
push ds es
|
||||
pusha
|
||||
push word ptr cs:fip
|
||||
push gs
|
||||
push fs
|
||||
push ss
|
||||
push es
|
||||
push ds
|
||||
push word ptr cs:fcs
|
||||
push dword ptr cs:fesp
|
||||
push ebp
|
||||
push edi
|
||||
push esi
|
||||
push edx
|
||||
push ecx
|
||||
push ebx
|
||||
push eax
|
||||
push dword ptr cs:ffl
|
||||
push cs
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
mov ah,26
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,4
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset reg
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset fla
|
||||
int 47h
|
||||
pop edx
|
||||
mov cx,32
|
||||
mov ah,11
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov si,offset regs
|
||||
mov bx,8+7
|
||||
mov ah,21
|
||||
mov cl,6
|
||||
int 47h
|
||||
showallREG:
|
||||
mov ah,6
|
||||
int 47h
|
||||
cmp bx,8
|
||||
jb nodr
|
||||
pop edx
|
||||
mov cx,32
|
||||
jmp popo
|
||||
nodr:
|
||||
mov ah,21
|
||||
mov cl,1
|
||||
int 47h
|
||||
xor edx,edx
|
||||
pop dx
|
||||
mov cx,16
|
||||
popo:
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
push si
|
||||
mov si,offset gr
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,8
|
||||
int 47h
|
||||
mov si,offset dr
|
||||
mov ah,13
|
||||
int 47h
|
||||
pop si
|
||||
add si,5
|
||||
dec bx
|
||||
jnz showallreg
|
||||
mov ah,34
|
||||
mov di,offset infos
|
||||
int 47h
|
||||
mov ah,25
|
||||
mov bl,cs:infos
|
||||
xor bh,bh
|
||||
dec bl
|
||||
int 47h
|
||||
mov si,offset app
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,32
|
||||
mov bl,cs:infos
|
||||
xor bh,bh
|
||||
mov di,ax
|
||||
dec di
|
||||
mov cl,116
|
||||
int 47h
|
||||
pop es ds
|
||||
sti
|
||||
waitt:
|
||||
cmp cs:isstate,0
|
||||
jne waitt
|
||||
mov ah,27
|
||||
int 47h
|
||||
popa
|
||||
pop es ds
|
||||
push dword ptr cs:ffl
|
||||
push word ptr cs:fcs
|
||||
push word ptr cs:fip
|
||||
jmp endof
|
||||
pushad
|
||||
pushf
|
||||
push ds
|
||||
mov cs:[eaxr],eax
|
||||
mov cs:[ebxr],ebx
|
||||
mov cs:[ecxr],ecx
|
||||
mov cs:[edxr],edx
|
||||
mov cs:[esir],esi
|
||||
mov cs:[edir],edi
|
||||
mov cs:[espr],esp
|
||||
mov cs:[ebpr],ebp
|
||||
mov cs:[csr],cs
|
||||
mov cs:[dsr],ds
|
||||
mov cs:[esr],es
|
||||
mov cs:[fsr],fs
|
||||
mov cs:[gsr],gs
|
||||
mov cs:[ssr],ss
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset sep
|
||||
call Showstr
|
||||
mov si,offset reg
|
||||
mov di,offset regdata
|
||||
mov bx,7
|
||||
showregs:
|
||||
cmp byte ptr cs:[si+6],":"
|
||||
jne endshowregs
|
||||
call Showstr
|
||||
cmp byte ptr cs:[si+4]," "
|
||||
je segsss
|
||||
mov edx,cs:[di]
|
||||
mov cx,32
|
||||
call Showhex
|
||||
add di,4
|
||||
jmp showmax
|
||||
segsss:
|
||||
mov dx,cs:[di]
|
||||
mov cx,16
|
||||
call Showhex
|
||||
add di,2
|
||||
showmax:
|
||||
add si,9
|
||||
mov bp,dx
|
||||
push si
|
||||
mov si,offset beginds
|
||||
call showstr
|
||||
mov si,bp
|
||||
mov cx,8
|
||||
mov al,0
|
||||
letshow:
|
||||
mov dl,ds:[si]
|
||||
inc si
|
||||
call showhex
|
||||
inc al
|
||||
cmp al,10
|
||||
jb letshow
|
||||
mov si,offset ende
|
||||
call showstr
|
||||
mov si,offset begines
|
||||
call showstr
|
||||
mov si,bp
|
||||
mov cx,8
|
||||
mov al,0
|
||||
letshow2:
|
||||
mov dl,es:[si]
|
||||
inc si
|
||||
call showhex
|
||||
inc al
|
||||
cmp al,10
|
||||
jb letshow2
|
||||
mov si,offset ende
|
||||
call showstr
|
||||
pop si
|
||||
jmp showregs
|
||||
endshowregs:
|
||||
mov si,offset sep
|
||||
call Showstr
|
||||
xor ax,ax
|
||||
int 16h
|
||||
pop ds
|
||||
popf
|
||||
popad
|
||||
jmp endof
|
||||
begines db ' es[',0
|
||||
beginds db ' ds[',0
|
||||
ende db '] ',0
|
||||
|
||||
|
||||
;==============================Affiche le nombre nb hexa en EDX de taille CX et couleur BL==============
|
||||
ShowHex:
|
||||
push ax bx cx edx si di
|
||||
mov di,cx
|
||||
sub cx,32
|
||||
neg cx
|
||||
shl edx,cl
|
||||
shr di,2
|
||||
mov ah,09h
|
||||
and bx,1111b
|
||||
Hexaize:
|
||||
rol edx,4
|
||||
mov si,dx
|
||||
and si,1111b
|
||||
mov al,[si+offset tab]
|
||||
push cx
|
||||
mov cx,1
|
||||
cmp al,32
|
||||
jb control2
|
||||
mov ah,09h
|
||||
int 10h
|
||||
control2:
|
||||
mov ah,0Eh
|
||||
int 10h
|
||||
pop cx
|
||||
dec di
|
||||
jnz Hexaize
|
||||
pop di si edx cx bx ax
|
||||
ret
|
||||
Tab db '0123456789ABCDEF'
|
||||
|
||||
;==============================Affiche une chaine DS:SI de couleur BL==============
|
||||
showstr:
|
||||
push ax bx cx si
|
||||
mov cx,1
|
||||
again:
|
||||
lodsb
|
||||
or al,al
|
||||
jz fin
|
||||
and bx,0111b
|
||||
cmp al,32
|
||||
jb control
|
||||
mov ah,09h
|
||||
int 10h
|
||||
control:
|
||||
mov ah,0Eh
|
||||
int 10h
|
||||
jmp again
|
||||
fin:
|
||||
pop si cx bx ax
|
||||
ret
|
||||
|
||||
|
||||
;================================================
|
||||
;Routine de débogage
|
||||
;================================================
|
||||
regdata:
|
||||
eaxr dd 0
|
||||
ebxr dd 0
|
||||
ecxr dd 0
|
||||
edxr dd 0
|
||||
esir dd 0
|
||||
edir dd 0
|
||||
espr dd 0
|
||||
ebpr dd 0
|
||||
csr dw 0
|
||||
dsr dw 0
|
||||
esr dw 0
|
||||
fsr dw 0
|
||||
gsr dw 0
|
||||
ssr dw 0
|
||||
|
||||
reg db 0Dh,0Ah,"eax : ",0
|
||||
db 0Dh,0Ah,"ebx : ",0
|
||||
db 0Dh,0Ah,"ecx : ",0
|
||||
db 0Dh,0Ah,"edx : ",0
|
||||
db 0Dh,0Ah,"esi : ",0
|
||||
db 0Dh,0Ah,"edi : ",0
|
||||
db 0Dh,0Ah,"esp : ",0
|
||||
db 0Dh,0Ah,"ebp : ",0
|
||||
db 0Dh,0Ah,"cs : ",0
|
||||
db 0Dh,0Ah,"ds : ",0
|
||||
db 0Dh,0Ah,"es : ",0
|
||||
db 0Dh,0Ah,"fs : ",0
|
||||
db 0Dh,0Ah,"gs : ",0
|
||||
db 0Dh,0Ah,"ss : ",0
|
||||
|
||||
sep db 0Ah,0Dh,'********************',0Ah,0Dh,0
|
||||
|
||||
reg db ' Etats des registres',0
|
||||
fla db 'Eflags:',0
|
||||
regs db 'EAX:',0
|
||||
db 'EBX:',0
|
||||
db 'ECX:',0
|
||||
db 'EDX:',0
|
||||
db 'ESI:',0
|
||||
db 'EDI:',0
|
||||
db 'EBP:',0
|
||||
db 'ESP:',0
|
||||
db ' CS:',0
|
||||
db ' DS:',0
|
||||
db ' ES:',0
|
||||
db ' FS:',0
|
||||
db ' GS:',0
|
||||
db ' SS:',0
|
||||
db ' IP:',0
|
||||
gr db '(',0
|
||||
dr db ')',0
|
||||
app db 'Appuyez sur espace pour quitter...',0
|
||||
ffl dd 0
|
||||
fcs dw 0
|
||||
fip dw 0
|
||||
fesp dd 0
|
||||
feax dd 0
|
||||
end start
|
||||
|
267
noyau/disque.asm
267
noyau/disque.asm
@ -3,13 +3,13 @@
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
org 0h
|
||||
|
||||
include ..\include\fat.h
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
jmp tsr ;Saute à la routine résidente
|
||||
names db 'DRIVE' ;Nom drivers
|
||||
id dw 1234h ;Identifiant drivers
|
||||
Tsr:
|
||||
cli ;Désactive interruptions logiciellement
|
||||
@ -36,15 +36,23 @@ noerrorint:
|
||||
itsok:
|
||||
push bp
|
||||
mov bp,sp ;On prend sp dans bp pour adresser la pile
|
||||
jnc noerror ;La fonction appelée a renvoyer une erreur : Flag CARRY ?
|
||||
pushf
|
||||
jnc noerror ;La fonction appelée a renvoyer une erreur : Flag CARRY ?
|
||||
or byte ptr [bp+6],1b;Si oui on le retranscrit sur le registre FLAG qui sera dépilé lors du IRET
|
||||
;xor eax,eax
|
||||
;mov ax,cs ;On récupère le segment et l'offset puis en renvoie l'adresse physique
|
||||
;shl eax,4 ;de l'erreur.
|
||||
;add ax,cs:current
|
||||
jmp endofint ;on termine l'int
|
||||
jmp endofscan ;on termine l'int
|
||||
noerror:
|
||||
and byte ptr [bp+6],0FEh;Si pas d'erreur on efface le Bit CARRY du FLAG qui sera dépilé lors du IRET
|
||||
endofscan:
|
||||
popf
|
||||
jne noequal
|
||||
or byte ptr [bp+6],1000000b
|
||||
jmp endofint
|
||||
noequal:
|
||||
and byte ptr [bp+6],0BFh
|
||||
endofint:
|
||||
pop bp
|
||||
sti ;On réactive les interruptions logiciellement
|
||||
@ -53,7 +61,7 @@ endofint:
|
||||
current dw 0 ;Mot temporaire qui contient l'adresse de la fonction appelée
|
||||
tables dw readsector
|
||||
dw writesector
|
||||
dw verifysector2
|
||||
dw verifysector
|
||||
dw initdrive
|
||||
dw loadfile
|
||||
dw compressrle
|
||||
@ -68,6 +76,8 @@ tables dw readsector
|
||||
dw readcluster
|
||||
dw writecluster
|
||||
dw getdir
|
||||
dw projfile
|
||||
dw execfile
|
||||
|
||||
maxfunc equ 24
|
||||
|
||||
@ -95,24 +105,30 @@ AdressDirectory dw 0 ;En cluster
|
||||
firstsearch dw 1 ;Premiere requete ?
|
||||
|
||||
getfat:
|
||||
push ax bx dx si
|
||||
push ax bx dx si ds gs
|
||||
mov dx,cs
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset datafat
|
||||
mov ah,9
|
||||
int 49h
|
||||
mov ax,cx
|
||||
mov bx,ax
|
||||
and bx,0000000000000001b
|
||||
shr ax,1
|
||||
mov cx,3
|
||||
mul cx
|
||||
mov si,offset bufferfat
|
||||
xor si,si
|
||||
add si,ax
|
||||
cmp bx,0h
|
||||
jnz evenfat
|
||||
oddfat:
|
||||
mov dx,cs:[si]
|
||||
mov dx,gs:[si]
|
||||
and dx,0FFFh
|
||||
mov cx,dx
|
||||
jmp endfat
|
||||
evenfat:
|
||||
mov dx,cs:[si+1]
|
||||
mov dx,gs:[si+1]
|
||||
and dx,0FFF0h
|
||||
shr dx,4
|
||||
mov cx,dx
|
||||
@ -120,11 +136,11 @@ endfat:
|
||||
cmp dx,0FF0h
|
||||
jbe nocarry
|
||||
stc
|
||||
pop si dx bx ax
|
||||
pop gs ds si dx bx ax
|
||||
ret
|
||||
nocarry:
|
||||
clc
|
||||
pop si dx bx ax
|
||||
pop gs ds si dx bx ax
|
||||
ret
|
||||
|
||||
;============loadfile (Fonction 4)===============
|
||||
@ -155,6 +171,108 @@ errorload:
|
||||
mov ecx,0
|
||||
pop di bx eax
|
||||
ret
|
||||
|
||||
;============execfile (Fonction 18)===============
|
||||
;Execute le fichier ds:si
|
||||
;-> AH=18
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
execfile:
|
||||
pushf
|
||||
push bp dx
|
||||
mov bp,sp
|
||||
mov dx,ss:[bp+10]
|
||||
pushad
|
||||
push ds es fs gs
|
||||
call projfile
|
||||
jc reallyerror
|
||||
push es
|
||||
pop gs
|
||||
mov ah,6
|
||||
int 49h
|
||||
mov ah,12
|
||||
int 49h
|
||||
jc reallyerror
|
||||
push es
|
||||
push cs
|
||||
mov ax,offset arrive
|
||||
push ax
|
||||
push es
|
||||
cmp word ptr gs:[0h],'EC'
|
||||
jne noce
|
||||
push size exe
|
||||
jmp wasce
|
||||
noce:
|
||||
push 0000h
|
||||
wasce:
|
||||
push es
|
||||
push es
|
||||
push es
|
||||
pop ds
|
||||
pop fs
|
||||
pop gs
|
||||
push 7202h
|
||||
popf
|
||||
sti
|
||||
db 0CBh
|
||||
arrive:
|
||||
cli
|
||||
pop gs
|
||||
mov ah,01
|
||||
int 49h
|
||||
pop gs fs es ds
|
||||
popad
|
||||
pop dx bp
|
||||
popf
|
||||
ret
|
||||
reallyerror:
|
||||
pop gs fs es ds
|
||||
popad
|
||||
pop dx bp
|
||||
popf
|
||||
stc
|
||||
ret
|
||||
|
||||
;============projfile (Fonction 17)===============
|
||||
;Charge le fichier ds:si sur un bloc mémoire -> ecx taille -> es bloc
|
||||
;-> AH=17
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
projfile:
|
||||
push eax bx di ds gs
|
||||
push cs
|
||||
pop es
|
||||
call uppercase
|
||||
mov ah,5
|
||||
int 49h
|
||||
jnc errorload2
|
||||
mov di,offset tempfit
|
||||
call searchfile
|
||||
jne errorload2
|
||||
jc errorload2
|
||||
mov eax,cs:tempfit.FileSize
|
||||
mov ecx,eax
|
||||
push eax
|
||||
mov ah,2
|
||||
int 49h
|
||||
pop eax
|
||||
jc errorload2
|
||||
push gs
|
||||
pop es
|
||||
mov cx,cs:tempfit.FileGroup
|
||||
mov di,0h
|
||||
call loadway
|
||||
jc errorload2
|
||||
clc
|
||||
mov ecx,eax
|
||||
pop gs ds di bx eax
|
||||
ret
|
||||
errorload2:
|
||||
stc
|
||||
mov ecx,0
|
||||
pop gs ds di bx eax
|
||||
ret
|
||||
|
||||
|
||||
tempfit db 32 dup (0)
|
||||
|
||||
@ -211,7 +329,6 @@ errorsearch:
|
||||
;Transforme la chaine ds:si en maj
|
||||
uppercase:
|
||||
push si ax
|
||||
mov di,si
|
||||
uppercaser:
|
||||
mov al,ds:[si]
|
||||
cmp al,0
|
||||
@ -237,29 +354,38 @@ CmpNames:
|
||||
repe cmpsb
|
||||
jne nequal
|
||||
inc si
|
||||
jmp equal
|
||||
nequal:
|
||||
cmp byte ptr es:[di-1],' '
|
||||
jne notequal
|
||||
equal:
|
||||
cmp byte ptr [si-1],'.'
|
||||
jne trynoext
|
||||
mov al,' '
|
||||
rep scasb
|
||||
mov cx,3
|
||||
rep cmpsb
|
||||
jne notequal
|
||||
cmp byte ptr [si],0
|
||||
jne notequal
|
||||
cmp cx,0
|
||||
jl notequal
|
||||
jne nequal2
|
||||
inc si
|
||||
jmp equal2
|
||||
nequal2:
|
||||
cmp byte ptr es:[di-1],' '
|
||||
jne notequal
|
||||
equal2:
|
||||
cmp byte ptr [si-1],0
|
||||
jne notequal
|
||||
itok:
|
||||
clc
|
||||
pop di si cx ax
|
||||
ret
|
||||
notequal:
|
||||
stc
|
||||
pop di si cx ax
|
||||
ret
|
||||
trynoext:
|
||||
cmp byte ptr [si-1],0
|
||||
jne notequal
|
||||
jmp itok
|
||||
notequal:
|
||||
stc
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;charge le fichier de de groupe CX et de taille eax
|
||||
LoadWay:
|
||||
@ -292,6 +418,7 @@ AdjustLast:
|
||||
mov cx,dx
|
||||
push cs
|
||||
pop ds
|
||||
cld
|
||||
rep movsb
|
||||
zeroload:
|
||||
clc
|
||||
@ -308,7 +435,7 @@ noway:
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
InitDrive:
|
||||
push eax bx cx edx di ds es
|
||||
push eax bx cx edx di ds es gs
|
||||
push cs
|
||||
pop ds
|
||||
push cs
|
||||
@ -327,9 +454,9 @@ againtry:
|
||||
dec di
|
||||
jnz againtry
|
||||
oknoagaintry:
|
||||
mov cs:lastseg,0
|
||||
mov cs:lastoff,0
|
||||
mov cs:LastRead,0
|
||||
mov lastseg,0
|
||||
mov lastoff,0
|
||||
mov LastRead,0
|
||||
mov ax,myboot.sectorsize
|
||||
mov bl,myboot.SectorsPerCluster
|
||||
xor bh,bh
|
||||
@ -370,9 +497,28 @@ oknoagaintry:
|
||||
mov adressdirectory,0
|
||||
mov firstsearch,1
|
||||
mov currentdirstr,0
|
||||
mov di,offset bufferfat
|
||||
xor eax,eax
|
||||
mov ax,myboot.SectorsPerFat
|
||||
mul myboot.SectorSize
|
||||
shl edx,16
|
||||
add edx,eax
|
||||
mov ecx,edx
|
||||
mov dx,cs
|
||||
mov si,offset datafat
|
||||
mov ah,9
|
||||
int 49h
|
||||
jnc hadafatbloc
|
||||
mov si,offset datafat
|
||||
mov ah,2
|
||||
int 49h
|
||||
mov ah,3
|
||||
int 49h
|
||||
hadafatbloc:
|
||||
xor di,di
|
||||
mov dx,myboot.SectorsPerFat
|
||||
mov cx,AdressFat
|
||||
push gs
|
||||
pop es
|
||||
SeeFat:
|
||||
call readsector
|
||||
jc ErrorInit
|
||||
@ -381,12 +527,14 @@ SeeFat:
|
||||
dec dx
|
||||
jnz seefat
|
||||
clc
|
||||
pop es ds di edx cx bx eax
|
||||
pop gs es ds di edx cx bx eax
|
||||
ret
|
||||
ErrorInit:
|
||||
stc
|
||||
pop es ds di edx cx bx eax
|
||||
pop gs es ds di edx cx bx eax
|
||||
ret
|
||||
|
||||
datafat db '/fat',0
|
||||
|
||||
;=============FindFirstFile (Fonction 7)==============
|
||||
;Renvois dans ES:DI un bloc d'info
|
||||
@ -648,10 +796,9 @@ lastoff dw 0
|
||||
;=====================================================
|
||||
WriteSector:
|
||||
push ax bx cx dx si es
|
||||
cmp cs:Lastread,cx
|
||||
jne nodestruct
|
||||
mov cs:Lastread,0ffffh
|
||||
nodestruct:
|
||||
mov cs:lastseg,0
|
||||
mov cs:lastoff,0
|
||||
mov cs:LastRead,0FFFFh
|
||||
push ds
|
||||
pop es
|
||||
mov ax,cx
|
||||
@ -667,7 +814,7 @@ nodestruct:
|
||||
xchg cl,ch
|
||||
shl cl,6
|
||||
or cl, bl
|
||||
mov bx,si
|
||||
mov bx,si
|
||||
mov SI, 4
|
||||
mov AL,1
|
||||
TryAgains:
|
||||
@ -716,25 +863,30 @@ getserial:
|
||||
;<- Flag Carry si erreur, Flag Equal si secteurs égaux
|
||||
;=====================================================
|
||||
VerifySector:
|
||||
push bx cx si di ds es
|
||||
push ecx si di ds es
|
||||
push cs
|
||||
pop es
|
||||
push cs
|
||||
pop ds
|
||||
mov bx,offset bufferread
|
||||
call ReadSector
|
||||
jc errorverify
|
||||
mov di,offset bufferread
|
||||
call ReadSector
|
||||
mov si,offset bufferread
|
||||
call inverse
|
||||
call WriteSector
|
||||
jc errorverify
|
||||
mov bx,offset bufferwrite
|
||||
call ReadSector
|
||||
|
||||
mov di,offset bufferwrite
|
||||
call ReadSector
|
||||
mov si,offset bufferwrite
|
||||
call inverse
|
||||
jc errorverify
|
||||
mov bx,offset bufferread
|
||||
|
||||
mov si,offset bufferread
|
||||
call inverse
|
||||
call WriteSector
|
||||
jc errorverify
|
||||
|
||||
xor ecx,ecx
|
||||
mov cx,cs:myboot.SectorSize
|
||||
shr cx,2
|
||||
mov si,offset bufferread
|
||||
@ -742,25 +894,19 @@ VerifySector:
|
||||
cld
|
||||
rep cmpsd
|
||||
errorverify:
|
||||
pop es ds di si cx bx
|
||||
pop es ds di si ecx
|
||||
ret
|
||||
|
||||
Inverse:
|
||||
mov si,cs:myboot.sectorsize
|
||||
shr si,2
|
||||
push si cx
|
||||
xor cx,cx
|
||||
invert:
|
||||
shl si,2
|
||||
not dword ptr [bx+si-4]
|
||||
shr si,2
|
||||
dec si
|
||||
jnz invert
|
||||
ret
|
||||
|
||||
VerifySector2:
|
||||
call verifysector
|
||||
jne nook
|
||||
or byte ptr [bp+6],10b
|
||||
nook:
|
||||
not dword ptr [si]
|
||||
add si,4
|
||||
add cx,4
|
||||
cmp cx,cs:myboot.sectorsize
|
||||
jb invert
|
||||
pop cx si
|
||||
ret
|
||||
|
||||
;=============DecompressRle (Fonction 05H)==============
|
||||
@ -788,6 +934,7 @@ decompression:
|
||||
mov cl,ah
|
||||
xor ah,ah
|
||||
xor ch,ch
|
||||
cld
|
||||
rep stosb
|
||||
add si,5
|
||||
sub dx,5
|
||||
@ -954,11 +1101,9 @@ getdir:
|
||||
pop es ds di si cx ax
|
||||
clc
|
||||
ret
|
||||
|
||||
|
||||
bufferread equ $
|
||||
bufferwrite equ $+2048
|
||||
bufferentry equ $+2048+2048
|
||||
bufferFat equ $+2048+2048+2048
|
||||
|
||||
bufferread db 512 dup (0)
|
||||
bufferwrite db 512 dup (0)
|
||||
bufferentry db 512 dup (0)
|
||||
|
||||
end start
|
||||
|
@ -3,7 +3,7 @@
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
org 0h
|
||||
|
||||
start:
|
||||
jmp tsr ;Saute à la routine résidente
|
||||
|
@ -3,7 +3,7 @@
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
org 0h
|
||||
|
||||
start:
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
org 0h
|
||||
|
||||
start:
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
org 0h
|
||||
start:
|
||||
jmp tsr
|
||||
drv db 'JOYSTICK',0
|
||||
|
810
noyau/mcb.asm
810
noyau/mcb.asm
@ -1,119 +1,731 @@
|
||||
FirstMB dw 0
|
||||
|
||||
;Initialise les blocs de mémoire
|
||||
MBinit:
|
||||
push ax cx es
|
||||
mov ax,gs
|
||||
mov cs:Firstmb,ax
|
||||
dec ax
|
||||
mov es,ax
|
||||
mov cx,0A000h
|
||||
sub cx,ax
|
||||
dec cx
|
||||
mov es:[MB.Reference],Free
|
||||
mov es:[MB.Sizes],cx
|
||||
mov es:[MB.Check],'NH'
|
||||
mov es:[MB.IsNotLast],False
|
||||
db "biosprint",0
|
||||
dw biosprint
|
||||
db "mbinit",0
|
||||
dw mbinit
|
||||
db "mbcreate",0
|
||||
dw mbcreate
|
||||
db "mbfree",0
|
||||
dw mbfree
|
||||
db "mbclean",0
|
||||
dw mbclean
|
||||
db "mbresident",0
|
||||
dw mbresident
|
||||
db "mbnonresident",0
|
||||
dw mbnonresident
|
||||
db "mbchown",0
|
||||
dw mbchown
|
||||
db "mballoc",0
|
||||
dw mballoc
|
||||
db "mbfind",0
|
||||
dw mbfind
|
||||
db "mbfindsb",0
|
||||
dw mbfindsb
|
||||
db "mbget",0
|
||||
dw mbget
|
||||
db "mbloadfuncs",0
|
||||
dw mbloadfuncs
|
||||
db "mbsearchfunc",0
|
||||
dw mbsearchfunc
|
||||
db "bioswaitkey",0
|
||||
dw bioswaitkey
|
||||
db "mbloadsection",0
|
||||
dw mbloadsection
|
||||
db "enableirq",0
|
||||
dw enableirq
|
||||
db "disableirq",0
|
||||
dw enableirq
|
||||
db "readmaskirq",0
|
||||
dw readmaskirq
|
||||
db "readirr",0
|
||||
dw readirr
|
||||
db "readisr",0
|
||||
dw readisr
|
||||
db "seteoi",0
|
||||
dw seteoi
|
||||
dd 0
|
||||
|
||||
include "8259a.asm"
|
||||
|
||||
;Affiche le nombre hexa dans %0[dword]
|
||||
PROC biosprinth FAR
|
||||
ARG @num:dword
|
||||
USES ax,bx,cx,edx,si,di
|
||||
mov edx,[@num]
|
||||
mov ah,09h
|
||||
mov di,8
|
||||
@@hexaize:
|
||||
rol edx,4
|
||||
mov si,dx
|
||||
and si,1111b
|
||||
mov al,[cs:si+offset @@tab]
|
||||
mov cx,1
|
||||
cmp al,32
|
||||
jb @@control
|
||||
mov bx,7
|
||||
mov ah,09h
|
||||
int 10h
|
||||
@@control:
|
||||
mov ah,0Eh
|
||||
int 10h
|
||||
dec di
|
||||
jnz @@hexaize
|
||||
ret
|
||||
@@tab db '0123456789ABCDEF'
|
||||
endp biosprinth
|
||||
|
||||
;Affiche le texte ASCIIZ pointé par %0
|
||||
PROC biosprint FAR
|
||||
ARG @pointer:word
|
||||
USES ax,bx,cx,si
|
||||
mov si,[@pointer]
|
||||
mov cx,1
|
||||
mov bx,7
|
||||
@@again:
|
||||
lodsb
|
||||
or al,al
|
||||
jz @@fin
|
||||
cmp al,32
|
||||
jb @@control
|
||||
mov ah,09h
|
||||
int 10h
|
||||
@@control:
|
||||
mov ah,0Eh
|
||||
int 10h
|
||||
jmp @@again
|
||||
@@fin:
|
||||
ret
|
||||
endp biosprint
|
||||
|
||||
;PROC flatmode FAR
|
||||
; USES eax,bx,edx
|
||||
; ; first, calculate the linear address of GDT
|
||||
; xor edx,edx
|
||||
; xor eax,eax
|
||||
; mov dx,cs
|
||||
; shl edx,4
|
||||
; add [dword ptr cs:offset @@gdt+2],edx ; store as GDT linear base addr
|
||||
; ; now load the GDT into the GDTR
|
||||
; lgdt [fword ptr cs:offset @@gdt] ; load GDT base (286-style 24-bit load)
|
||||
; mov bx,1 * size descriptor ; point to first descriptor
|
||||
; mov eax,cr0 ; prepare to enter protected mode
|
||||
; or al,1 ; flip the PE bit
|
||||
; cli ; turn off interrupts
|
||||
; mov cr0,eax ; we're now in protected mode
|
||||
; mov fs,bx ; load the FS segment register
|
||||
; and al,0FEh ; clear the PE bit again
|
||||
; mov cr0,eax ; back to real mode
|
||||
; sti ; resume handling interrupts
|
||||
; ret ;
|
||||
|
||||
;@@gdt descriptor <@@gdtend - @@gdt - 1, @@gdt, 0, 0, 0, 0> ; the GDT itself
|
||||
; descriptor <0ffffh, 0, 0, 091h, 0cfh, 0> ; 4G data segment
|
||||
;@@gdtend:
|
||||
;endp flatmode
|
||||
|
||||
;Attend l'appuie sur une touche
|
||||
PROC bioswaitkey FAR
|
||||
xor ax,ax
|
||||
int 16h
|
||||
ret
|
||||
endp bioswaitkey
|
||||
|
||||
firstmb dw 0
|
||||
|
||||
|
||||
;Charge les sections du block %0
|
||||
PROC mbloadsection FAR
|
||||
ARG @blocks:word
|
||||
USES ax,bx,cx,si,di,ds,es
|
||||
LOCAL @@toresov:word:60
|
||||
mov ax,[@blocks]
|
||||
inc ax
|
||||
inc ax
|
||||
mov es,ax
|
||||
mov ds,ax
|
||||
cmp [word ptr 0],"EC"
|
||||
jne @@notace
|
||||
lea si,[@@toresov]
|
||||
mov [word ptr ss:si],0FFFFh
|
||||
mov bx,[ds:exe.sections]
|
||||
@@loading:
|
||||
cmp [dword ptr bx],0
|
||||
je @@finishloading
|
||||
mov ax,bx
|
||||
add ax,4
|
||||
call mbcreate,ax,[word ptr bx+2]
|
||||
jc @@error
|
||||
inc si
|
||||
inc si
|
||||
mov [ss:si],ax
|
||||
push si
|
||||
mov si,[bx]
|
||||
xor di,di
|
||||
mov es,ax
|
||||
mov cx,[bx+2]
|
||||
cld
|
||||
rep movsb
|
||||
pop si
|
||||
add bx,4
|
||||
@@gonext:
|
||||
inc bx
|
||||
cmp [byte ptr bx],0
|
||||
jne @@gonext
|
||||
inc bx
|
||||
jmp @@loading
|
||||
@@finishloading:
|
||||
pushad
|
||||
xor eax,eax
|
||||
mov ax,[word ptr ss:si]
|
||||
call biosprinth,eax
|
||||
popad
|
||||
cmp [word ptr ss:si],0FFFFh
|
||||
je @@finishdepands
|
||||
call mbloadfuncs,[word ptr ss:si]
|
||||
jc @@depandserror
|
||||
dec si
|
||||
dec si
|
||||
jmp @@finishloading
|
||||
@@finishdepands:
|
||||
ret
|
||||
@@notace:
|
||||
stc
|
||||
ret
|
||||
@@error:
|
||||
stc
|
||||
ret
|
||||
@@depandserror:
|
||||
stc
|
||||
ret
|
||||
endp mbloadsection
|
||||
|
||||
|
||||
;Initialise les blocs de mémoire en prenant memorystart pour segment de base
|
||||
PROC mbinit FAR
|
||||
USES ax,cx,si,di,ds,es
|
||||
cmp [cs:firstmb],0
|
||||
jne @@alreadyok
|
||||
push cs
|
||||
pop ds
|
||||
mov [cs:firstmb],memorystart
|
||||
mov ax,memorystart-2
|
||||
mov es,ax
|
||||
mov si,offset afree
|
||||
xor di,di
|
||||
mov cx,size mb
|
||||
rep movsb
|
||||
clc
|
||||
pop es cx ax
|
||||
ret
|
||||
notforfree:
|
||||
@@alreadyok:
|
||||
stc
|
||||
pop es cx ax
|
||||
ret
|
||||
endp mbinit
|
||||
|
||||
;Libère le bloc de mémoire GS
|
||||
MBFree:
|
||||
push bx es
|
||||
mov bx,gs
|
||||
dec bx
|
||||
mov es,bx
|
||||
cmp es:[MB.Check],'NH'
|
||||
je notforfree
|
||||
mov es:[MB.IsResident],0
|
||||
mov es:[MB.Reference],Free
|
||||
mov dword ptr es:[MB.Names],'eerF'
|
||||
mov dword ptr es:[MB.Names+4],0
|
||||
pop es bx
|
||||
ret
|
||||
afree mb <"HN",0,0,0,0A000h-memorystart,"Libre">
|
||||
db 0
|
||||
|
||||
;Creér un bloc de nom ds:si de taille cx (octets) -> n°segement dans GS
|
||||
MBCreate:
|
||||
push ax bx cx dx si di es
|
||||
;Creér un bloc de nom %0 de taille %1 (octets) -> n°segment dans AX
|
||||
PROC mbcreate FAR
|
||||
ARG @blocks:word,@size:word
|
||||
USES bx,cx,dx,si,di,ds,es
|
||||
push gs
|
||||
mov gs,[ss:bp+4]
|
||||
mov cx,[@size]
|
||||
shr cx,4
|
||||
inc cx
|
||||
mov bx,cs:firstmb
|
||||
mov bx,[cs:firstmb]
|
||||
dec bx
|
||||
searchfree:
|
||||
mov es,bx
|
||||
cmp es:[MB.Check],'NH'
|
||||
jne wasntgood
|
||||
cmp es:[MB.IsNotLast],True
|
||||
dec bx
|
||||
mov dl,true
|
||||
@@searchfree:
|
||||
cmp dl,false
|
||||
je @@notenougtmem
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
cmp [es:mb.isnotlast],true
|
||||
sete dl
|
||||
cmp es:[MB.Reference],Free
|
||||
je weregood
|
||||
cmp dl,False
|
||||
je wasntgood
|
||||
notsogood:
|
||||
inc bx
|
||||
add bx,es:[MB.Sizes]
|
||||
jmp searchfree
|
||||
weregood:
|
||||
mov ax,es:[MB.Sizes]
|
||||
cmp [es:mb.reference],free
|
||||
jne @@notsogood
|
||||
mov ax,[es:mb.sizes]
|
||||
cmp cx,ax
|
||||
ja notsogood
|
||||
mov es:[MB.IsNotLast],True
|
||||
mov es:[MB.Reference],cs
|
||||
mov es:[MB.IsResident],False
|
||||
mov es:[MB.Sizes],cx
|
||||
mov di,MB.Names
|
||||
push ax cx
|
||||
mov cx,8
|
||||
loops:
|
||||
mov dh,[si]
|
||||
inc si
|
||||
dec cx
|
||||
jz endofloops
|
||||
cmp dh,0
|
||||
je endofloops
|
||||
mov es:[di],dh
|
||||
inc di
|
||||
jmp loops
|
||||
endofloops:
|
||||
inc cx
|
||||
mov al,0
|
||||
rep stosb
|
||||
pop cx ax
|
||||
mov word ptr es:[MB.Check],'NH'
|
||||
sub ax,cx
|
||||
ja @@notsogood
|
||||
;mov [word ptr es:mb.check],"NH"
|
||||
mov [es:mb.isnotlast],true
|
||||
mov [es:mb.reference],gs
|
||||
mov [es:mb.isresident],false
|
||||
lea di,[es:mb.names]
|
||||
push cx
|
||||
mov cx,24/4
|
||||
push cs
|
||||
pop ds
|
||||
mov si,[@blocks]
|
||||
cld
|
||||
rep movsd
|
||||
pop cx
|
||||
inc bx
|
||||
inc bx
|
||||
sub ax,cx
|
||||
cmp ax,0
|
||||
je @@nofree
|
||||
dec ax
|
||||
js nofree
|
||||
inc bx
|
||||
mov gs,bx
|
||||
add bx,cx
|
||||
mov es,bx
|
||||
mov es:[MB.IsNotLast],dl
|
||||
mov es:[MB.IsResident],False
|
||||
mov es:[MB.Reference],Free
|
||||
mov es:[MB.Sizes],ax
|
||||
mov dword ptr es:[MB.Names],'eerF'
|
||||
mov dword ptr es:[MB.Names+4],0
|
||||
mov es:[MB.Check],'NH'
|
||||
nofree:
|
||||
dec ax
|
||||
mov [es:mb.sizes],cx
|
||||
add cx,bx
|
||||
mov es,cx
|
||||
mov si,offset afree
|
||||
xor di,di
|
||||
mov cx,size mb
|
||||
cld
|
||||
rep movsb
|
||||
mov [es:mb.isnotlast],dl
|
||||
mov [es:mb.sizes],ax
|
||||
@@nofree:
|
||||
mov ax,bx
|
||||
clc
|
||||
pop es di si dx cx bx ax
|
||||
pop gs
|
||||
ret
|
||||
wasntgood:
|
||||
@@notsogood:
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,[es:mb.sizes]
|
||||
jmp @@searchfree
|
||||
@@memoryerror:
|
||||
stc
|
||||
pop es di si dx cx bx ax
|
||||
pop gs
|
||||
ret
|
||||
@@notenougtmem:
|
||||
pop gs
|
||||
stc
|
||||
ret
|
||||
endp mbcreate
|
||||
|
||||
;Libère le bloc de mémoire %0 et ses sous blocs
|
||||
PROC mbfree FAR
|
||||
ARG @blocks:word
|
||||
USES ax,bx,cx,si,di,ds,es
|
||||
mov bx,[@blocks]
|
||||
mov ax,bx
|
||||
dec bx
|
||||
dec bx
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
cmp [es:mb.reference],free
|
||||
je @@wasfree
|
||||
cmp [es:mb.isresident],true
|
||||
je @@wasresident
|
||||
mov [es:mb.reference],free
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset @@isfree
|
||||
lea di,[es:mb.names]
|
||||
mov cx,6
|
||||
cld
|
||||
rep movsb
|
||||
mov bx,[cs:firstmb]
|
||||
dec bx
|
||||
dec bx
|
||||
@@searchtofree:
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,[es:mb.sizes]
|
||||
cmp [es:mb.sizes],0
|
||||
je @@nottofree
|
||||
cmp ax,[es:mb.reference]
|
||||
jne @@nottofree
|
||||
mov [es:mb.isresident],false
|
||||
mov [es:mb.reference],free
|
||||
mov cx,6
|
||||
cld
|
||||
rep movsb
|
||||
@@nottofree:
|
||||
cmp [es:mb.isnotlast],true
|
||||
je @@searchtofree
|
||||
call mbclean
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
@@wasfree:
|
||||
stc
|
||||
ret
|
||||
@@wasresident:
|
||||
stc
|
||||
ret
|
||||
|
||||
@@isfree db "libre",0
|
||||
endp mbfree
|
||||
|
||||
;Mise a nivo de la mémoire (jonction de blocs libre)
|
||||
PROC mbclean FAR
|
||||
USES ax,bx,dx,es,gs
|
||||
mov bx,[cs:firstmb]
|
||||
dec bx
|
||||
dec bx
|
||||
xor ax,ax
|
||||
xor dx,dx
|
||||
@@searchfree:
|
||||
mov gs,bx
|
||||
cmp [word ptr gs:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,[gs:mb.sizes]
|
||||
cmp [word ptr gs:mb.sizes],0
|
||||
je @@notenougtmem
|
||||
cmp [gs:mb.reference],free
|
||||
jne @@notfree
|
||||
cmp ax,0
|
||||
je @@notmeetfree
|
||||
add dx,[gs:mb.sizes]
|
||||
mov [word ptr gs:mb.check],0
|
||||
mov [dword ptr gs:mb.names],0
|
||||
inc dx
|
||||
inc dx
|
||||
jmp @@nottrigered
|
||||
@@notmeetfree:
|
||||
xor dx,dx
|
||||
mov ax,gs
|
||||
jmp @@nottrigered
|
||||
@@notfree:
|
||||
cmp ax,0
|
||||
je @@nottrigered
|
||||
mov es,ax
|
||||
add [es:mb.sizes],dx
|
||||
xor ax,ax
|
||||
@@nottrigered:
|
||||
cmp [gs:mb.isnotlast],true
|
||||
je @@searchfree
|
||||
cmp ax,0
|
||||
je @@reallyfinish
|
||||
mov es,ax
|
||||
add [es:mb.sizes],dx
|
||||
mov [es:mb.isnotlast],false
|
||||
@@reallyfinish:
|
||||
clc
|
||||
ret
|
||||
@@notenougtmem:
|
||||
stc
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
endp mbclean
|
||||
|
||||
;Rend le segment %0 résident
|
||||
PROC mbresident FAR
|
||||
ARG @blocks:word
|
||||
USES bx,es
|
||||
mov bx,[@blocks]
|
||||
dec bx
|
||||
dec bx
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
mov [es:mb.isresident],true
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
endp mbresident
|
||||
|
||||
;Rend le segment %0 non résident
|
||||
PROC mbnonresident FAR
|
||||
ARG @blocks:word
|
||||
USES bx,es
|
||||
mov bx,[@blocks]
|
||||
dec bx
|
||||
dec bx
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
mov [es:mb.isresident],false
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
endp mbnonresident
|
||||
|
||||
|
||||
;Change le proprietaire de %0 a %1
|
||||
PROC mbchown FAR
|
||||
ARG @blocks:word,@owner:word
|
||||
USES bx,dx,es
|
||||
mov bx,[@blocks]
|
||||
dec bx
|
||||
dec bx
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
cmp [es:mb.reference],free
|
||||
je @@wasfree
|
||||
mov dx,[@owner]
|
||||
mov [es:mb.reference],dx
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
@@wasfree:
|
||||
stc
|
||||
ret
|
||||
endp mbchown
|
||||
|
||||
;Alloue un bloc /data de CX caractere pour le process appelant -> ax
|
||||
PROC mballoc FAR
|
||||
ARG @size:word
|
||||
USES ax,si,ds
|
||||
push cs
|
||||
pop ds
|
||||
call mbcreate,offset @@data,[@size]
|
||||
call mbchown,ax,[word ptr ss:bp+4]
|
||||
ret
|
||||
|
||||
;Rend le segment GS résident
|
||||
MBresident:
|
||||
push bx es
|
||||
mov bx,gs
|
||||
@@data db '/data',0
|
||||
endp mballoc
|
||||
|
||||
;Renvoie en AX le MB n° %0 carry quand terminé
|
||||
PROC mbget FAR
|
||||
ARG @num:word
|
||||
USES bx,dx,es
|
||||
mov bx,[cs:firstmb]
|
||||
dec bx
|
||||
mov es,bx
|
||||
mov es:[MB.IsResident],True
|
||||
pop es bx
|
||||
dec bx
|
||||
xor dx,dx
|
||||
@@searchfree:
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,[es:mb.sizes]
|
||||
cmp [es:mb.sizes],0
|
||||
je @@memoryerror
|
||||
cmp dx,[@num]
|
||||
je @@foundmcb
|
||||
ja @@notfound
|
||||
inc dx
|
||||
cmp [es:mb.isnotlast],true
|
||||
je @@searchfree
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
@@foundmcb:
|
||||
mov ax,es
|
||||
inc ax
|
||||
inc ax
|
||||
clc
|
||||
ret
|
||||
@@notfound:
|
||||
stc
|
||||
ret
|
||||
endp mbget
|
||||
|
||||
;Renvoie en AX le MCB qui correspond a ds:%0
|
||||
PROC mbfind FAR
|
||||
ARG @blocks:word
|
||||
USES bx,si,di,es
|
||||
mov bx,[cs:firstmb]
|
||||
dec bx
|
||||
dec bx
|
||||
mov si,[@blocks]
|
||||
lea di,[es:mb.names]
|
||||
@@search:
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,[es:mb.sizes]
|
||||
cmp [es:mb.sizes],0
|
||||
je @@memoryerror
|
||||
push si di
|
||||
@@cmpnames:
|
||||
mov al,[es:di]
|
||||
cmp al,[ds:si]
|
||||
jne @@ok
|
||||
cmp al,0
|
||||
je @@ok
|
||||
inc si
|
||||
inc di
|
||||
jmp @@cmpnames
|
||||
@@ok:
|
||||
pop di si
|
||||
je @@foundmcb
|
||||
cmp [es:mb.isnotlast],true
|
||||
je @@search
|
||||
@@notfound:
|
||||
stc
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
@@foundmcb:
|
||||
mov ax,es
|
||||
inc ax
|
||||
inc ax
|
||||
clc
|
||||
ret
|
||||
endp mbfind
|
||||
|
||||
|
||||
;Renvoie en AX le sous mcb qui correspond a %0 et qui appartien a %1
|
||||
PROC mbfindsb FAR
|
||||
ARG @blocks:word,@owner:word
|
||||
USES bx,dx,si,di,es
|
||||
mov bx,[cs:firstmb]
|
||||
dec bx
|
||||
dec bx
|
||||
mov si,[@blocks]
|
||||
lea di,[es:mb.names]
|
||||
mov dx,[@owner]
|
||||
@@search:
|
||||
mov es,bx
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
inc bx
|
||||
inc bx
|
||||
add bx,[es:mb.sizes]
|
||||
cmp [es:mb.sizes],0
|
||||
je @@memoryerror
|
||||
push si di
|
||||
@@cmpnames:
|
||||
mov al,[es:di]
|
||||
cmp al,[ds:si]
|
||||
jne @@ok
|
||||
cmp al,0
|
||||
je @@ok
|
||||
inc si
|
||||
inc di
|
||||
jmp @@cmpnames
|
||||
@@ok:
|
||||
pop di si
|
||||
jne @@notfoundmcb
|
||||
cmp [es:mb.reference],dx
|
||||
je @@foundmcb
|
||||
@@notfoundmcb:
|
||||
cmp [es:mb.isnotlast],true
|
||||
je @@search
|
||||
@@notfound:
|
||||
stc
|
||||
ret
|
||||
@@foundmcb:
|
||||
mov ax,es
|
||||
inc ax
|
||||
inc ax
|
||||
clc
|
||||
ret
|
||||
@@memoryerror:
|
||||
stc
|
||||
ret
|
||||
endp mbfindsb
|
||||
|
||||
;Resouds les dépendances du bloc de mémoire %0
|
||||
PROC mbloadfuncs FAR
|
||||
ARG @blocks:word
|
||||
USES ax,bx,cx,dx,si,ds
|
||||
mov ds,[@blocks]
|
||||
cmp [word ptr 0],"EC"
|
||||
jne @@notace
|
||||
mov si,[ds:exe.imports]
|
||||
cmp si,0
|
||||
je @@endofloading
|
||||
@@loadfuncs:
|
||||
cmp [word ptr si],0
|
||||
je @@endofloading
|
||||
call mbsearchfunc,si
|
||||
jnc @@toendoftext
|
||||
mov bx,si
|
||||
@@findend:
|
||||
inc bx
|
||||
cmp [byte ptr bx], ':'
|
||||
jne @@findend
|
||||
mov [byte ptr bx],0
|
||||
;call projectfile,bx
|
||||
jc @@erroronload
|
||||
mov [byte ptr bx],':'
|
||||
call mbsearchfunc,si
|
||||
jc @@libnotexist
|
||||
@@toendoftext:
|
||||
mov cl,[si]
|
||||
cmp cl,0
|
||||
je @@oktonext
|
||||
inc si
|
||||
jmp @@toendoftext
|
||||
@@oktonext:
|
||||
inc si
|
||||
mov [si],ax
|
||||
mov [si+2],dx
|
||||
add si,4
|
||||
jmp @@loadfuncs
|
||||
@@endofloading:
|
||||
clc
|
||||
ret
|
||||
@@notace:
|
||||
stc
|
||||
ret
|
||||
@@libnotexist:
|
||||
stc
|
||||
ret
|
||||
@@erroronload:
|
||||
stc
|
||||
ret
|
||||
endp mbloadfuncs
|
||||
|
||||
|
||||
;Recherche une fonction pointé par DS:SI en mémoire et renvoie son adresse en DX:AX
|
||||
PROC mbsearchfunc FAR
|
||||
ARG @func:word
|
||||
USES bx,si,di,es
|
||||
mov bx,[@func]
|
||||
push bx
|
||||
@@findend:
|
||||
inc bx
|
||||
cmp [byte ptr bx], ':'
|
||||
jne @@findend
|
||||
mov [byte ptr bx],0
|
||||
call mbfind
|
||||
mov [byte ptr bx],':'
|
||||
jc @@notfoundattallthesb
|
||||
mov es,ax
|
||||
cmp [word ptr es:exe.checks],"EC"
|
||||
jne @@notfoundattallthesb
|
||||
mov di,[es:exe.exports]
|
||||
inc bx
|
||||
inc bx
|
||||
@@functions:
|
||||
cmp [word ptr es:di],0
|
||||
je @@notfoundattallthesb
|
||||
mov si,bx
|
||||
@@cmpnamesfunc:
|
||||
mov al,[es:di]
|
||||
cmp al,[ds:si]
|
||||
jne @@notfoundthesb
|
||||
cmp al,0
|
||||
je @@seemsok
|
||||
inc si
|
||||
inc di
|
||||
jmp @@cmpnamesfunc
|
||||
@@notfoundthesb:
|
||||
mov al,[es:di]
|
||||
cmp al,0
|
||||
je @@oktonext
|
||||
inc di
|
||||
jmp @@notfoundthesb
|
||||
@@oktonext:
|
||||
inc di
|
||||
inc di
|
||||
inc di
|
||||
jmp @@functions
|
||||
@@seemsok:
|
||||
mov dx,es
|
||||
mov ax,[es:di+1]
|
||||
clc
|
||||
ret
|
||||
@@notfoundattallthesb:
|
||||
stc
|
||||
ret
|
||||
endp mbsearchfunc
|
||||
|
@ -2,7 +2,7 @@
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
org 0h
|
||||
start:
|
||||
jmp tsr
|
||||
drv db 'LPT ',0
|
||||
|
@ -2,7 +2,7 @@
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
org 0h
|
||||
start:
|
||||
jmp tsr
|
||||
drv db 'MOUSE',0
|
||||
|
1105
noyau/systeme.asm
1105
noyau/systeme.asm
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,9 @@
|
||||
mcb.sys(49)
|
||||
video.sys(47)
|
||||
horloge.sys(8)
|
||||
8259a.sys(50)
|
||||
disque.sys(48)
|
||||
souris.sys(74)
|
||||
heure.sys(8)
|
||||
clavier.sys(9)
|
||||
heure.sys(8)
|
||||
port.sys(D)
|
2381
noyau/video.asm
2381
noyau/video.asm
File diff suppressed because it is too large
Load Diff
@ -2,56 +2,52 @@ lnk_boot = tlink /x
|
||||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
|
||||
all: detect.exe editeur.exe gestion.exe logo.exe pmode.exe souris.exe test.exe verifier.exe volume.exe
|
||||
all: detect.com editeur.com gestion.com logo.com pmode.com souris.com test.com verifier.com volume.com memoire.com
|
||||
|
||||
detect.exe: detect.asm
|
||||
memoire.com: memoire.asm
|
||||
$(asm) memoire
|
||||
$(lnk) memoire
|
||||
|
||||
detect.com: detect.asm
|
||||
$(asm) detect
|
||||
$(lnk) detect
|
||||
ren detect.com detect.exe
|
||||
|
||||
editeur.exe: editeur.asm
|
||||
editeur.com: editeur.asm
|
||||
$(asm) editeur
|
||||
$(lnk) editeur
|
||||
ren editeur.com editeur.exe
|
||||
|
||||
gestion.exe: gestion.asm
|
||||
gestion.com: gestion.asm
|
||||
$(asm) gestion
|
||||
$(lnk) gestion
|
||||
ren gestion.com gestion.exe
|
||||
|
||||
logo.exe: logo.asm
|
||||
logo.com: logo.asm
|
||||
$(asm) logo
|
||||
$(lnk) logo
|
||||
ren logo.com logo.exe
|
||||
|
||||
pmode.exe: pmode.asm
|
||||
pmode.com: pmode.asm
|
||||
$(asm) pmode
|
||||
$(lnk) pmode
|
||||
ren pmode.com pmode.exe
|
||||
|
||||
souris.exe: souris.asm
|
||||
souris.com: souris.asm
|
||||
$(asm) souris
|
||||
$(lnk) souris
|
||||
ren souris.com souris.exe
|
||||
|
||||
test.exe: test.asm
|
||||
test.com: test.asm
|
||||
$(asm) test
|
||||
$(lnk) test
|
||||
ren test.com test.exe
|
||||
|
||||
verifier.exe: verifier.asm
|
||||
verifier.com: verifier.asm
|
||||
$(asm) verifier
|
||||
$(lnk) verifier
|
||||
ren verifier.com verifier.exe
|
||||
|
||||
volume.exe: volume.asm
|
||||
volume.com: volume.asm
|
||||
$(asm) volume
|
||||
$(lnk) volume
|
||||
ren volume.com volume.exe
|
||||
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.com
|
||||
del *.com
|
||||
del *.sys
|
||||
del *.err
|
||||
|
@ -3,47 +3,32 @@
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
org 0h
|
||||
|
||||
include ..\include\pci.h
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
call cleartext
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
|
||||
realstart:
|
||||
call getpciinfos
|
||||
mov pciversion,bx
|
||||
mov nbbus,cl
|
||||
mov pcitype,al
|
||||
mov [pciversion],bx
|
||||
mov [nbbus],cl
|
||||
mov [pcitype],al
|
||||
|
||||
mov si,offset msg
|
||||
call showstring0
|
||||
call line
|
||||
|
||||
mov si,offset pcivers
|
||||
call showstring0
|
||||
xor edx,edx
|
||||
mov dx,bx
|
||||
xchg dl,dh
|
||||
mov cx,8
|
||||
call showhex
|
||||
mov si,offset poin
|
||||
call showstring0
|
||||
shr dx,8
|
||||
call showhex
|
||||
mov si,offset pcivers2
|
||||
call showstring0
|
||||
call line
|
||||
|
||||
mov si,offset nbbuses
|
||||
call showstring0
|
||||
xor edx,edx
|
||||
mov dl,nbbus
|
||||
mov dl,[nbbus]
|
||||
inc dl
|
||||
call showint
|
||||
call line
|
||||
push edx
|
||||
mov dx,[pciversion]
|
||||
push edx
|
||||
mov dx,[pciversion]
|
||||
shr dx,8
|
||||
push edx
|
||||
push offset msg
|
||||
call [print]
|
||||
|
||||
mov si,offset typesof
|
||||
call showstring0
|
||||
mov di,offset types
|
||||
mov bx,7
|
||||
mov al,pcitype
|
||||
@ -51,53 +36,51 @@ vote:
|
||||
bt ax,bx
|
||||
jnc nowas
|
||||
shl bx,1
|
||||
mov si,[di+bx]
|
||||
call showstring0
|
||||
mov si,offset spac
|
||||
call showstring0
|
||||
push word ptr [di+bx]
|
||||
call [print]
|
||||
shr bx,1
|
||||
nowas:
|
||||
dec bx
|
||||
jns vote
|
||||
call line
|
||||
push offset return
|
||||
call [print]
|
||||
|
||||
xor ax,ax
|
||||
xor cx,cx
|
||||
mov di,offset infos
|
||||
mov si,offset infos
|
||||
search:
|
||||
mov di,si
|
||||
call Getallfunctionsinfos
|
||||
jc stopthis
|
||||
|
||||
push cx di
|
||||
mov si,offset msg1
|
||||
call showstring0
|
||||
mov cx,16
|
||||
xor edx,edx
|
||||
mov dx,[di+pci.device]
|
||||
call showhex
|
||||
mov si,offset msg2
|
||||
call showstring0
|
||||
mov dx,[di+pci.vendor]
|
||||
call showhex
|
||||
mov si,offset msg3
|
||||
call showstring0
|
||||
mov cl,[di+pci.class]
|
||||
mov ch,[di+pci.subclass]
|
||||
mov di,offset temp
|
||||
call getpciclass
|
||||
mov si,di
|
||||
call showstring0
|
||||
mov si,offset poin
|
||||
call showstring0
|
||||
mov di,offset temp
|
||||
mov dh,[si+pci.subclass]
|
||||
mov dl,[si+pci.class]
|
||||
;sousclasse
|
||||
mov di,offset subclasse
|
||||
call getpcisubclass
|
||||
mov si,di
|
||||
call showstring0
|
||||
call line
|
||||
pop di cx
|
||||
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]
|
||||
|
||||
jmp noerror
|
||||
noerror:
|
||||
inc ch
|
||||
cmp ch,7
|
||||
jbe search
|
||||
@ -110,30 +93,24 @@ xor cl,cl
|
||||
inc al
|
||||
cmp al,16
|
||||
jbe search
|
||||
ret
|
||||
retf
|
||||
|
||||
msg3 db ' Classe:',0
|
||||
msg1 db 'Peripherique :',0
|
||||
msg2 db ' Constructeur :',0
|
||||
msg db 'COS2000 hardware detecteur V1.1',0
|
||||
pcivers db 'BIOS PCI version ',0
|
||||
pcivers2 db ' a ete detecte !',0
|
||||
nbbuses db 'Nombre de bus : ',0
|
||||
typesof db 'Caracterisques PCI: ',0
|
||||
poin db '.',0
|
||||
virg db ', ',0
|
||||
spac db ' ',0
|
||||
temp db 128 dup (0)
|
||||
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)
|
||||
|
||||
types dw config1
|
||||
dw config2
|
||||
dw poin
|
||||
dw poin
|
||||
dw null
|
||||
dw null
|
||||
dw config3
|
||||
dw config4
|
||||
dw poin
|
||||
dw poin
|
||||
|
||||
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
|
||||
@ -146,12 +123,12 @@ infos db 256 dup (0)
|
||||
|
||||
;fonction 0-7 bus 0-255 device 0-31
|
||||
|
||||
;renvoie en es:di de classe cl
|
||||
;renvoie en es:di de classe dl
|
||||
getpciclass:
|
||||
push ax cx si di ds es
|
||||
push ax cx dx si di ds es
|
||||
push es
|
||||
push di
|
||||
mov di,cx
|
||||
mov di,dx
|
||||
and di,0FFh
|
||||
shl di,1
|
||||
mov di,[offset classes+di]
|
||||
@ -169,27 +146,27 @@ pop ds
|
||||
pop di
|
||||
pop es
|
||||
rep movsb
|
||||
pop es ds di si cx ax
|
||||
pop es ds di si dx cx ax
|
||||
ret
|
||||
|
||||
;renvoie en es:di la sous-classe de ch et de classe cl
|
||||
;renvoie en es:di la sous-classe de dh et de classe dl
|
||||
getpcisubclass:
|
||||
push ax cx si di ds es
|
||||
push ax cx dx si di ds es
|
||||
push es
|
||||
push di
|
||||
mov di,cx
|
||||
mov di,dx
|
||||
and di,0FFh
|
||||
shl di,1
|
||||
mov di,[offset classesd+di]
|
||||
xchg ch,cl
|
||||
xor ch,ch
|
||||
cmp cx,80h
|
||||
xchg dh,dl
|
||||
xor dh,dh
|
||||
cmp dx,80h
|
||||
jne suiteac
|
||||
mov di,offset divers
|
||||
jmp found
|
||||
suiteac:
|
||||
shl cx,1
|
||||
add di,cx
|
||||
shl dx,1
|
||||
add di,dx
|
||||
mov di,[di]
|
||||
found:
|
||||
mov cx,0FFh
|
||||
@ -206,7 +183,7 @@ pop ds
|
||||
pop di
|
||||
pop es
|
||||
rep movsb
|
||||
pop es ds di si cx ax
|
||||
pop es ds di si dx cx ax
|
||||
ret
|
||||
divers db 'divers',0
|
||||
|
||||
@ -224,19 +201,30 @@ dw offset class9
|
||||
dw offset class10
|
||||
dw offset class11
|
||||
dw offset class12
|
||||
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
|
||||
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:
|
||||
@ -253,6 +241,11 @@ 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
|
||||
@ -265,30 +258,40 @@ 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
|
||||
@ -305,36 +308,50 @@ 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 'mc',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
|
||||
subclass80 db 'pic 8259a',0
|
||||
subclass81 db 'dma 8237',0
|
||||
subclass82 db 'tim 8254',0
|
||||
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
|
||||
@ -357,10 +374,47 @@ 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:
|
||||
@ -380,29 +434,22 @@ errorpci:
|
||||
pop dx
|
||||
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
|
||||
|
||||
;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
|
||||
@ -427,180 +474,78 @@ notexist:
|
||||
stc
|
||||
pop di dx bx ax
|
||||
ret
|
||||
|
||||
; PCI TYPE 1
|
||||
;*******************************************************************
|
||||
config1_addr equ 0CF8h
|
||||
config1_data equ 0CFCh
|
||||
|
||||
;=============CLEAR=========
|
||||
;Efface l'ecran texte
|
||||
;->
|
||||
;<-
|
||||
;=============================
|
||||
cleartext:
|
||||
push es eax cx di
|
||||
xor di,di
|
||||
mov ax,0b800h
|
||||
mov es,ax
|
||||
mov eax,07200720h
|
||||
mov cx,cs:pagesize
|
||||
shr cx,2
|
||||
cld
|
||||
rep stosd
|
||||
mov cs:xy,0
|
||||
mov cs:x,0
|
||||
mov cs:y,0
|
||||
pop di cx eax es
|
||||
ret
|
||||
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
|
||||
|
||||
|
||||
;==========LINE=========
|
||||
;remet le curseur a la ligne
|
||||
;->
|
||||
;<-
|
||||
;=============================
|
||||
line:
|
||||
push bx cx di es
|
||||
mov bh,cs:x
|
||||
mov bl,cs:y
|
||||
xor bh,bh
|
||||
mov cl,cs:lines
|
||||
dec cl
|
||||
dec cl
|
||||
cmp bl,cl
|
||||
jne scro
|
||||
dec bl
|
||||
mov cl,1
|
||||
call scrolldown
|
||||
scro:
|
||||
inc bl
|
||||
call setxy
|
||||
pop es di cx bx
|
||||
ret
|
||||
; PCI TYPE 2
|
||||
;*******************************************************************
|
||||
config2_reg0 equ 0CFBh
|
||||
config2_reg1 equ 0CF8h
|
||||
config2_reg2 equ 0CFAh
|
||||
|
||||
;==========SETXY=========
|
||||
;Change les coordonnées du curseur a X:AH,Y:AL
|
||||
;-> AX
|
||||
;<- es di
|
||||
;=============================
|
||||
setxy:
|
||||
push ax bx dx
|
||||
mov cs:x,bh
|
||||
mov cs:y,bl
|
||||
mov al,bl
|
||||
mov bl,bh
|
||||
xor bh,bh
|
||||
mov di,bx
|
||||
mul cs:columns
|
||||
add di,ax
|
||||
shl di,1
|
||||
mov cs:xy,di
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
pop dx bx ax
|
||||
ret
|
||||
|
||||
;==========SCROLLDOWN=========
|
||||
;defile de cx lines vers le bas
|
||||
;-> CX
|
||||
;<-
|
||||
;=============================
|
||||
scrolldown:
|
||||
push ax cx dx si di ds es
|
||||
mov si,0B800h
|
||||
mov es,si
|
||||
mov ds,si
|
||||
mov ax,cx
|
||||
mul cs:columns
|
||||
shl ax,1
|
||||
mov si,ax
|
||||
mov cx,cs:pagesize
|
||||
sub cx,si
|
||||
xor di,di
|
||||
cld
|
||||
rep movsb
|
||||
pop es ds di si dx cx ax
|
||||
ret
|
||||
|
||||
|
||||
;===================================Afficher un int EDX a l'‚cran en ah,al================
|
||||
ShowInt:
|
||||
push eax bx cx edx esi di es ds
|
||||
mov di,cs:xy
|
||||
mov cx,0B800h
|
||||
mov es,cx
|
||||
xor cx,cx
|
||||
mov eax,edx
|
||||
mov esi,10
|
||||
mov bx,offset showbuffer+27
|
||||
decint3:
|
||||
xor edx,edx
|
||||
div esi
|
||||
add dl,'0'
|
||||
mov dh,7
|
||||
sub bx,2
|
||||
add cx,2
|
||||
mov cs:[bx],dx
|
||||
cmp ax,0
|
||||
jne decint3
|
||||
mov si,bx
|
||||
push cs
|
||||
pop ds
|
||||
cld
|
||||
rep movsb
|
||||
mov cs:xy,di
|
||||
pop ds es di esi edx cx bx eax
|
||||
ret
|
||||
|
||||
;================Affiche la chaine 0 de caractŠre contenue dans ds:si
|
||||
showstring0:
|
||||
push es cx si di
|
||||
mov di,cs:xy
|
||||
mov cx,0B800h
|
||||
mov es,cx
|
||||
mov ch,cs:colors
|
||||
strinaize0:
|
||||
mov cl,[si]
|
||||
cmp cl,0
|
||||
je no0
|
||||
mov es:[di],cx
|
||||
add di,2
|
||||
inc si
|
||||
jmp strinaize0
|
||||
no0:
|
||||
mov cs:xy,di
|
||||
pop di si cx es
|
||||
ret
|
||||
|
||||
;==============================Affiche le nombre nb hexa en EDX==============
|
||||
ShowHex:
|
||||
push es ax bx cx edx di
|
||||
mov di,cs:xy
|
||||
mov bx,0B800h
|
||||
mov es,bx
|
||||
mov ax,cx
|
||||
sub cx,32
|
||||
neg cx
|
||||
shl edx,cl
|
||||
mov ch,cs:colors
|
||||
shr ax,2
|
||||
Hexaize:
|
||||
rol edx,4
|
||||
mov bx,dx
|
||||
and bx,0fh
|
||||
mov cl,cs:[bx+offset Tab]
|
||||
mov es:[di],cx
|
||||
add di,2
|
||||
dec al
|
||||
jnz Hexaize
|
||||
mov cs:xy,di
|
||||
pop di edx cx bx ax es
|
||||
ret
|
||||
|
||||
Tab db '0123456789ABCDEF'
|
||||
x db 0
|
||||
y db 0
|
||||
xy dw 0
|
||||
pagesize dw 80*25*2
|
||||
lines db 25
|
||||
columns db 80
|
||||
colors db 7
|
||||
showbuffer db 35 dup (0FFh)
|
||||
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
|
||||
|
@ -1,13 +1,21 @@
|
||||
.model tiny
|
||||
.386c
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
|
||||
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
|
||||
realstart:
|
||||
mov ax,0305h
|
||||
mov bx,0008h
|
||||
int 16h
|
||||
mov ah,28h
|
||||
int 47h
|
||||
mov ax,0002
|
||||
int 47H
|
||||
mov ah,2
|
||||
@ -41,62 +49,43 @@ Adres:
|
||||
int 47h
|
||||
mov bh,infos
|
||||
mov edi,ebp
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
lines:
|
||||
xor edx,edx
|
||||
mov dx,di
|
||||
push edx
|
||||
mov edx,edi
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
mov cx,16
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov si,offset dep
|
||||
mov ah,13
|
||||
int 47h
|
||||
push edx
|
||||
push offset spaces
|
||||
call [print]
|
||||
mov dx,di
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset spaces
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
mov al,infos+1
|
||||
mov cl,7
|
||||
mov ah,21
|
||||
int 47h
|
||||
mov esi,edi
|
||||
doaline:
|
||||
mov edx,edi
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
mov fs,dx
|
||||
mov dl,fs:[di]
|
||||
mov ah,10
|
||||
mov cl,8
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
push dword ptr fs:[di]
|
||||
push 8
|
||||
call [showhex]
|
||||
push ' '
|
||||
call [showchar]
|
||||
inc edi
|
||||
dec al
|
||||
jnz doaline
|
||||
mov edi,esi
|
||||
mov si,offset spaces
|
||||
mov ah,13
|
||||
int 47h
|
||||
push offset spaces2
|
||||
call [print]
|
||||
mov al,infos+1
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
doaline2:
|
||||
mov edx,edi
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
mov fs,dx
|
||||
mov dl,fs:[di]
|
||||
mov ah,7
|
||||
int 47h
|
||||
push word ptr fs:[di]
|
||||
call [showchar]
|
||||
inc edi
|
||||
dec al
|
||||
jnz doaline2
|
||||
@ -108,14 +97,12 @@ doaline2:
|
||||
int 47h
|
||||
jmp lines
|
||||
outes:
|
||||
mov ah,21
|
||||
mov cl,112
|
||||
int 47h
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
mov si,offset menu
|
||||
mov ah,14h
|
||||
mov ah,25
|
||||
int 47h
|
||||
push offset menu
|
||||
call [print]
|
||||
waitkey:
|
||||
mov ax,0
|
||||
int 16h
|
||||
@ -151,18 +138,13 @@ outes:
|
||||
suit6:
|
||||
cmp ax,4100h
|
||||
jne suit7
|
||||
mov ah,21
|
||||
mov cl,116
|
||||
int 47h
|
||||
mov dword ptr [pope],'TIDE'
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
xor bh,bh
|
||||
mov si,offset menu
|
||||
mov ah,14h
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
mov ah,25
|
||||
int 47h
|
||||
push offset menu
|
||||
call [print]
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov xxyy2,3
|
||||
@ -241,28 +223,20 @@ writs:
|
||||
cmp ch,cl
|
||||
je no
|
||||
push si ax
|
||||
mov ah,25
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
xor bh,bh
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,117
|
||||
int 47h
|
||||
mov si,offset msg
|
||||
mov ah,13
|
||||
mov ah,25
|
||||
int 47h
|
||||
push offset msg
|
||||
call [print]
|
||||
mov ax,0
|
||||
int 16h
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
xor bh,bh
|
||||
mov ah,25
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,116
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset menu
|
||||
int 47h
|
||||
push offset menu
|
||||
call [print]
|
||||
pop bx si
|
||||
mov es:[bx-1],edi
|
||||
mov es:[si-1],dx
|
||||
@ -285,10 +259,9 @@ cursor:
|
||||
suit7:
|
||||
cmp ax,4200h
|
||||
jne adres
|
||||
mov ah,27
|
||||
mov ah,29h
|
||||
int 47h
|
||||
db 0CBH ; +++++++
|
||||
ret
|
||||
retf
|
||||
|
||||
calc1:
|
||||
push ax dx si
|
||||
@ -375,14 +348,25 @@ yy dw 0
|
||||
xxyy dw 3
|
||||
xxyy2 dw 3
|
||||
|
||||
msg db 'Erreur : zone non modifiable (ROM) pressez une touche pour continuer ',0
|
||||
menu db 'haut/bas [F1/2] Offset [F3/4] Segment [F5/6] Mode F7, Quitter F8 MODE '
|
||||
msg db '\c74Erreur : zone non modifiable (ROM) pressez une touche pour continuer ',0
|
||||
menu db '\c70haut/bas [F1/2] Offset [F3/4] Segment [F5/6] Mode F7, Quitter F8 MODE '
|
||||
pope db 'VUE ',0
|
||||
spaces db ' ³ ',0
|
||||
spaces db '\c02%hW:%hW \c04| \c07',0
|
||||
spaces2 db '\c04 | \c07',0
|
||||
|
||||
showbuffer db 35 dup (0FFh)
|
||||
oldmode db 0
|
||||
infos db 40 dup (0)
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
db "VIDEO.LIB::showhex",0
|
||||
showhex dd 0
|
||||
db "VIDEO.LIB::showchar",0
|
||||
showchar dd 0
|
||||
dw 0
|
||||
|
||||
end start
|
||||
|
||||
|
||||
|
29
programs/exem-ce.asm
Normal file
29
programs/exem-ce.asm
Normal file
@ -0,0 +1,29 @@
|
||||
.model small
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,offset exports,>
|
||||
|
||||
realstart:
|
||||
push offset message
|
||||
call [affiche]
|
||||
call [waitkey]
|
||||
retf
|
||||
|
||||
message db 'Appel de la librairie video !',0
|
||||
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
affiche dd 0
|
||||
db "EXEM-LIB.LIB::waitkey",0
|
||||
waitkey dd 0
|
||||
dw 0
|
||||
exports:
|
||||
|
||||
end start
|
25
programs/exem-lib.asm
Normal file
25
programs/exem-lib.asm
Normal file
@ -0,0 +1,25 @@
|
||||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,offset exports,>
|
||||
|
||||
|
||||
getvar2:
|
||||
mov ax,0
|
||||
int 16h
|
||||
retf
|
||||
|
||||
|
||||
imports:
|
||||
|
||||
exports:
|
||||
db "waitkey",0
|
||||
dw getvar2
|
||||
dw 0
|
||||
end start
|
@ -3,133 +3,42 @@
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
include ..\include\fat.h
|
||||
|
||||
start:
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,25
|
||||
mov bx,0
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,70h
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset msg1
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset prompt
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset infos
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset prompt
|
||||
int 47h
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
|
||||
realstart:
|
||||
push offset msg1
|
||||
call [print]
|
||||
|
||||
mov ah,3
|
||||
int 48h
|
||||
xor bp,bp
|
||||
mov di,offset bufferentry
|
||||
mov si,di
|
||||
mov ah,7
|
||||
int 48h
|
||||
jc nofiles
|
||||
go:
|
||||
test [si+Entries.FileAttr],00010000b
|
||||
je notdirectory
|
||||
mov ah,21
|
||||
mov cl,4
|
||||
int 47h
|
||||
jmp notall
|
||||
notdirectory:
|
||||
cmp [si+Entries.FilExt],'E'
|
||||
jne notexe
|
||||
cmp [si+Entries.FilExt+1],'X'
|
||||
jne notexe
|
||||
cmp [si+Entries.FilExt+2],'E'
|
||||
jne notexe
|
||||
mov ah,21
|
||||
mov cl,5
|
||||
int 47h
|
||||
jmp notall
|
||||
notexe:
|
||||
cmp [si+Entries.FilExt],'S'
|
||||
jne notsys
|
||||
cmp [si+Entries.FilExt+1],'Y'
|
||||
jne notsys
|
||||
cmp [si+Entries.FilExt+2],'S'
|
||||
jne notsys
|
||||
mov ah,21
|
||||
mov cl,0Ah
|
||||
int 47h
|
||||
jmp notall
|
||||
notsys:
|
||||
mov ah,21
|
||||
mov cl,7h
|
||||
int 47h
|
||||
notall:
|
||||
mov ah,46
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,44
|
||||
mov dx,[si+Entries.FileDateCrea]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,45
|
||||
mov dx,[si+Entries.FileTimeCrea]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,44
|
||||
mov dx,[si+Entries.FileDate]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,45
|
||||
mov dx,[si+Entries.FileTime]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,48
|
||||
mov edx,[si+Entries.FileSize]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,47
|
||||
mov dl,[si+Entries.FileAttr]
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
push word ptr [di+Entries.FileAttr]
|
||||
push dword ptr [di+Entries.FileSize]
|
||||
push word ptr [di+Entries.FileTime]
|
||||
push word ptr [di+Entries.FileDate]
|
||||
push word ptr [di+Entries.FileTimeCrea]
|
||||
push word ptr [di+Entries.FileDateCrea]
|
||||
push di
|
||||
push offset line
|
||||
call [print]
|
||||
inc bp
|
||||
mov ah,8
|
||||
int 48h
|
||||
jnc go
|
||||
nofiles:
|
||||
mov ah,21
|
||||
mov cl,70h
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset menu
|
||||
int 47h
|
||||
push offset menu
|
||||
call [print]
|
||||
mov xx,1
|
||||
mov xxold,2
|
||||
call Select
|
||||
@ -139,7 +48,7 @@ int 16h
|
||||
cmp ah,50h
|
||||
jne tre1
|
||||
cmp xx,bp
|
||||
je endof
|
||||
ja endof
|
||||
inc xx
|
||||
call select
|
||||
jmp endof
|
||||
@ -157,11 +66,11 @@ tre2:
|
||||
tre3:
|
||||
cmp ah,59
|
||||
jne tre4
|
||||
jmp start
|
||||
jmp realstart
|
||||
tre4:
|
||||
cmp ah,67
|
||||
jne endof
|
||||
db 0CBh
|
||||
retf
|
||||
|
||||
;selectionne la ligne xx
|
||||
Select:
|
||||
@ -183,12 +92,18 @@ ret
|
||||
|
||||
xx dw 1
|
||||
xxold dw 0
|
||||
menu db '[F1] Lire disque [F9] Quitter ',0
|
||||
msg1 db ' Gestionnaire de fichier Version 1.0 ',0
|
||||
msg2 db 'Programme en cours de chargement',0
|
||||
prompt db '--------------------------------------------------------------------------------',0
|
||||
infos db 'Nom Ext. Date creation Date modification Taille Attributs',0
|
||||
menu db '\c70 [F1] Lire disque [F9] Quitter \c07',0
|
||||
msg1 db '\e\g00,00\c70 Gestionnaire de fichier Version 1.5 '
|
||||
db '\g00,01\c07--------------------------------------------------------------------------------'
|
||||
db '\g00,02Nom Ext. Date creation Date modification Taille Attributs'
|
||||
db '\g00,03--------------------------------------------------------------------------------\l',0
|
||||
line db '\c07%n %d %t %d %t %z %a\l',0
|
||||
bufferentry db 512 dup (0)
|
||||
|
||||
bufferentry equ $
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
dw 0
|
||||
|
||||
end start
|
||||
|
39
programs/isa.asm
Normal file
39
programs/isa.asm
Normal file
@ -0,0 +1,39 @@
|
||||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
start:
|
||||
|
||||
PNP_ADR_PORT equ 0x279
|
||||
PNP_WRITE_PORT equ 0xA79
|
||||
;MIN and MAX READ_ADDR must have the bottom two bits set
|
||||
MIN_READ_ADDR equ 0x203
|
||||
MAX_READ_ADDR equ 0x3FF
|
||||
;READ_ADDR_STEP must be a multiple of 4
|
||||
READ_ADDR_STEP equ 8
|
||||
|
||||
;bits
|
||||
CONFIG_WAIT_FOR_KEY equ 0x02
|
||||
CONFIG_RESET_CSN equ 0x04
|
||||
IDENT_LEN equ 9
|
||||
|
||||
;renvoie le timer en ax
|
||||
ctc:
|
||||
cli
|
||||
mov dx,043h
|
||||
mov al,0
|
||||
out dx,al
|
||||
mov dx,40h
|
||||
in al,dx
|
||||
mov ah,al
|
||||
in al,dx
|
||||
sti
|
||||
ret
|
||||
|
||||
;attend pendant ax microsecondes
|
||||
usleep:
|
||||
|
||||
end start
|
@ -1,22 +1,37 @@
|
||||
.model tiny
|
||||
.386c
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
|
||||
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
|
||||
realstart:
|
||||
mov ah,7
|
||||
mov cx,65535
|
||||
int 49h
|
||||
jc problem3
|
||||
push gs
|
||||
pop es
|
||||
mov ah,7
|
||||
mov cx,65535
|
||||
int 49h
|
||||
jc problem3
|
||||
mov si,offset logo
|
||||
mov ah,4
|
||||
xor di,di
|
||||
mov bx,8000h
|
||||
mov es,bx
|
||||
int 48h
|
||||
jc problem
|
||||
|
||||
|
||||
push es
|
||||
pop ds
|
||||
mov bx,7000h
|
||||
mov es,bx
|
||||
push gs
|
||||
pop es
|
||||
xor si,si
|
||||
xor di,di
|
||||
mov ah,6
|
||||
@ -25,58 +40,75 @@ jc problem2
|
||||
|
||||
push es
|
||||
pop ds
|
||||
xor si,si
|
||||
|
||||
mov ax,0008h
|
||||
mov ah,28h
|
||||
int 47h
|
||||
mov ah,38
|
||||
mov ax,0008h
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov cx,300
|
||||
mov bx,30
|
||||
mov ah,37
|
||||
int 47h
|
||||
mov ah,15h
|
||||
mov cl,11
|
||||
int 47h
|
||||
push 0
|
||||
call cs:[loadbmppalet]
|
||||
push 150
|
||||
push 20
|
||||
push 0
|
||||
call cs:[showbmp]
|
||||
jc problem4
|
||||
push cs
|
||||
pop ds
|
||||
mov ah,13
|
||||
mov si,offset poper
|
||||
int 47h
|
||||
mov ax,0
|
||||
push offset poper
|
||||
call [print]
|
||||
endofit:
|
||||
xor ax,ax
|
||||
int 16h
|
||||
mov ah,39
|
||||
int 47h
|
||||
mov ax,0004
|
||||
int 47h
|
||||
db 0CBH
|
||||
mov ah,29h
|
||||
int 47h
|
||||
retf
|
||||
|
||||
problem:
|
||||
push cs
|
||||
pop ds
|
||||
mov ah,13
|
||||
mov si,offset error
|
||||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
db 0CBh
|
||||
push offset error
|
||||
call [print]
|
||||
jmp endofit
|
||||
|
||||
problem2:
|
||||
push cs
|
||||
pop ds
|
||||
mov ah,13
|
||||
mov si,offset error2
|
||||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
db 0CBh
|
||||
push offset error2
|
||||
call [print]
|
||||
jmp endofit
|
||||
|
||||
poper db 'COS2000 en mode graphique',0
|
||||
problem3:
|
||||
push cs
|
||||
pop ds
|
||||
push offset error3
|
||||
call [print]
|
||||
jmp endofit
|
||||
|
||||
problem4:
|
||||
push cs
|
||||
pop ds
|
||||
push offset error4
|
||||
call [print]
|
||||
jmp endofit
|
||||
|
||||
poper db '\c0BC\c0CO\c0DS\c0E2\c0E0\c0E0\c0F0 en mode graphique',0
|
||||
logo db 'cos.rip',0
|
||||
ok1 db 'Chargement de l''image OK',0
|
||||
ok2 db 'Decompression de l''image OK',0
|
||||
error db 'Une erreur est apparue lors du chargement de l''image',0
|
||||
error2 db 'Une erreur est apparue lors de la decompression de l''image',0
|
||||
error3 db '\c04Une erreur est apparue lors de l''allocation de mémoire',0
|
||||
error db '\c04Une erreur est apparue lors du chargement de l''image',0
|
||||
error2 db '\c04Une erreur est apparue lors de la decompression de l''image',0
|
||||
error4 db '\c0FUne erreur est apparue lors de l''affichage de l''image',0
|
||||
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
db "BMP.LIB::showbmp",0
|
||||
showbmp dd 0
|
||||
db "BMP.LIB::loadbmppalet",0
|
||||
loadbmppalet dd 0
|
||||
dw 0
|
||||
end start
|
||||
|
82
programs/memoire.asm
Normal file
82
programs/memoire.asm
Normal file
@ -0,0 +1,82 @@
|
||||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
include ..\include\divers.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
|
||||
realstart:
|
||||
push offset msg
|
||||
call [print]
|
||||
|
||||
xor cx,cx
|
||||
listmcb:
|
||||
mov ah,4
|
||||
int 49h
|
||||
jc fino
|
||||
inc cx
|
||||
|
||||
;placement mémoire
|
||||
mov dx,gs
|
||||
inc dx
|
||||
inc dx
|
||||
push edx
|
||||
|
||||
;parent
|
||||
cmp gs:[MB.Reference],0
|
||||
je next
|
||||
mov dx,gs:[MB.Reference]
|
||||
dec dx
|
||||
dec dx
|
||||
push dx
|
||||
push offset MB.Names
|
||||
jmp suitemn
|
||||
next:
|
||||
push cs
|
||||
push offset none
|
||||
suitemn:
|
||||
|
||||
;Resident
|
||||
cmp gs:[MB.IsResident],true
|
||||
jne notresident
|
||||
push offset resident
|
||||
jmp suitelistmcb
|
||||
notresident:
|
||||
push offset nonresident
|
||||
suitelistmcb:
|
||||
|
||||
;taille memoire
|
||||
xor edx,edx
|
||||
mov dx,gs:[MB.Sizes]
|
||||
shl edx,4
|
||||
push 6
|
||||
push edx
|
||||
|
||||
;nom
|
||||
push gs
|
||||
push offset MB.Names
|
||||
|
||||
push offset line
|
||||
call [print]
|
||||
|
||||
jmp listmcb
|
||||
fino:
|
||||
db 0CBh
|
||||
resident db "oui",0
|
||||
nonresident db "non",0
|
||||
line db "%0P\h15%w\h24%0\h30%0P\h46%hW\l",0
|
||||
msg db "Memory manager V1.5\lNom Taille Res Parent Mem\l",0
|
||||
none db ".",0
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
dw 0
|
||||
|
||||
end start
|
@ -3,7 +3,7 @@
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
org 0h
|
||||
|
||||
start:
|
||||
mov eax,cr0
|
||||
|
@ -3,11 +3,25 @@
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
|
||||
realstart:
|
||||
mov ah,2
|
||||
int 74h
|
||||
db 0CBh
|
||||
push offset message
|
||||
call [print]
|
||||
retf
|
||||
|
||||
message db 'Activation de la souris',0
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
dw 0
|
||||
|
||||
end start
|
||||
|
@ -2,181 +2,36 @@
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
mov ah,26
|
||||
int 47h
|
||||
mov ax,0001
|
||||
int 47h
|
||||
mov ah,2
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
|
||||
realstart:
|
||||
mov ah,28h
|
||||
int 47h
|
||||
|
||||
mov si,offset text1 ;titre
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,3
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset text2
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov edx,2612182686
|
||||
mov ah,8
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov edx,7576534
|
||||
mov ah,8
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,4
|
||||
int 47h
|
||||
mov si,offset text3
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov edx,-6876253
|
||||
mov cx,32
|
||||
mov ah,9
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov edx,-311212323
|
||||
mov cx,32
|
||||
mov ah,9
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,5
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset text4
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov edx,0892325457
|
||||
mov cx,16
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov edx,0236514
|
||||
mov ah,10
|
||||
mov cx,32
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,6
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset text5
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov edx,3762182686
|
||||
mov ah,11
|
||||
mov cx,32
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov edx,2182686
|
||||
mov ah,11
|
||||
mov cx,16
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset text6
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov dl,'h'
|
||||
mov ah,7
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov dl,'@'
|
||||
mov ah,7
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,8
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset text7
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov si,offset textt
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov si,offset texttt
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,9
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset text71
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov dx,0BF30h
|
||||
mov ah,44
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov dx,0B0B6h
|
||||
mov ah,44
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
mov ah,13
|
||||
mov si,offset text72
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov edx,8601h
|
||||
mov ah,45
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov dx,0B0B6h
|
||||
mov ah,45
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
|
||||
|
||||
|
||||
push word ptr 0FFFFh
|
||||
push dword ptr 652201
|
||||
push dword ptr 1545454545
|
||||
push word ptr 1523
|
||||
push word ptr 2041
|
||||
push offset zero
|
||||
push offset fixe
|
||||
push word ptr 5
|
||||
push word ptr 'i'
|
||||
push word ptr 'a'
|
||||
push dword ptr 5041
|
||||
push dword ptr 125645
|
||||
push dword ptr 5041
|
||||
push dword ptr 125645
|
||||
push dword ptr 5041
|
||||
push dword ptr 125645
|
||||
push offset message
|
||||
call [print]
|
||||
mov ax,0
|
||||
int 16h
|
||||
|
||||
@ -187,20 +42,14 @@ int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
|
||||
mov ah,21
|
||||
mov cl,5
|
||||
int 47h
|
||||
mov cx,200
|
||||
go1:
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,33
|
||||
int 47
|
||||
mov ah,20
|
||||
xor bh,bh
|
||||
inc bl
|
||||
mov si,offset text8
|
||||
int 47h
|
||||
push offset textdemo1
|
||||
call [print]
|
||||
call put
|
||||
mov ah,30
|
||||
int 47h
|
||||
@ -209,20 +58,14 @@ int 47h
|
||||
dec cx
|
||||
jnz go1
|
||||
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
mov cx,200
|
||||
go2:
|
||||
mov si,offset text9
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,33
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,13
|
||||
int 47h
|
||||
push offset textdemo2
|
||||
call [print]
|
||||
call put
|
||||
mov ah,30
|
||||
int 47h
|
||||
@ -231,20 +74,14 @@ int 47h
|
||||
dec cx
|
||||
jnz go2
|
||||
|
||||
mov ah,21
|
||||
mov cl,9
|
||||
int 47h
|
||||
mov cx,200
|
||||
go3:
|
||||
mov si,offset text10
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,33
|
||||
int 47h
|
||||
xor bh,bh
|
||||
inc bl
|
||||
mov ah,20
|
||||
int 47h
|
||||
push offset textdemo3
|
||||
call [print]
|
||||
call put
|
||||
mov ah,30
|
||||
int 47h
|
||||
@ -257,14 +94,8 @@ mov ah,30
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov bx,040Dh
|
||||
mov si,offset texte1
|
||||
mov ah,20
|
||||
int 47h
|
||||
mov si,offset texte2
|
||||
inc bl
|
||||
mov ah,20
|
||||
int 47h
|
||||
push offset texte2
|
||||
call [print]
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,2
|
||||
@ -272,9 +103,6 @@ int 47h
|
||||
mov ah,30
|
||||
int 47h
|
||||
|
||||
mov cl,12
|
||||
mov ah,21
|
||||
int 47h
|
||||
mov bp,255
|
||||
xor edx,edx
|
||||
go4:
|
||||
@ -283,32 +111,28 @@ int 47h
|
||||
mov ah,33
|
||||
int 47h
|
||||
inc edx
|
||||
mov ah,11
|
||||
mov cx,16
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
push edx
|
||||
push offset texte3
|
||||
call [print]
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,33
|
||||
int 47h
|
||||
dec bp
|
||||
jnz go4
|
||||
mov ah,27
|
||||
int 47h
|
||||
xor bx,bx
|
||||
mov si,offset texte3
|
||||
mov ah,20
|
||||
int 47h
|
||||
push offset texte4
|
||||
call [print]
|
||||
mov ax,0
|
||||
int 16h
|
||||
db 0CBh
|
||||
mov ah,29h
|
||||
int 47h
|
||||
retf
|
||||
|
||||
put:
|
||||
call random
|
||||
mov di,dx
|
||||
and di,4096-2
|
||||
mov si,offset text11
|
||||
mov si,offset fond
|
||||
call showstring2
|
||||
ret
|
||||
|
||||
@ -332,24 +156,27 @@ mov cs:randseed,dx
|
||||
pop dx cx ax
|
||||
ret
|
||||
|
||||
texttt db 'Texte',0
|
||||
textt db 'Divers',0
|
||||
text1 db ' D‚monstration de l''utilisation de la bibliothŠque VIDEO',0
|
||||
text2 db 'Nombre entier :',0
|
||||
text3 db 'Nombre sign‚ :',0
|
||||
text4 db 'Nombre h‚xad‚cimal :',0
|
||||
text5 db 'Nombre binaire :',0
|
||||
text6 db 'CaractŠres :',0
|
||||
text7 db 'Texte :',0
|
||||
text71 db 'Date :',0
|
||||
text72 db 'Heure :',0
|
||||
text8 db 'Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling',0
|
||||
text9 db 'Vertical Vertical Vertical Vertical Vertical Vertical Vertical Vertical',0
|
||||
text10 db 'Rapide Rapide Rapide Rapide Rapide Rapide Rapide Rapide',0
|
||||
text11 db 'Echange rapide de pages Vid‚o',0
|
||||
texte1 db 'Routine d''affichage Ultra Rapide Agissant sur le Mat‚riel',0
|
||||
texte2 db 'Possibilit‚ de r‚aliser des effets de superposition',0
|
||||
texte3 db 'Sauvegarde et restauration de l''ecran',0
|
||||
zero db 'Chaine a z‚ro terminal',0
|
||||
fixe db 20,'Chaine a taille fixe'
|
||||
message db "\m01\e\c07\h01D‚monstration de la librairie VIDEO.LIB\l\l"
|
||||
db "\c01Nombres entiers ou sign‚s (%%u/%%i):\l%u\l%iD\l"
|
||||
db "\c02Nombre hexad‚cimaux (%%h):\l%hD\l%hW\l"
|
||||
db "\c03Nombres Binaires (%%b):\l%bD\l%bB\l"
|
||||
db "\c04Caracteres simples ou multiples (%%c/%%cM):\l%c\l%cM\l"
|
||||
db "\c05Chaines a z‚ro terminal ou fixes (%%0/%%s):\l%s\l%0\l"
|
||||
db "\c06Dates et heures (%%t/%%d):\l%t\l%d\l"
|
||||
db "\c07Nombre a echelle automatique (%%z):\l%z\l%z\l"
|
||||
db "\c08Attributs de fichiers (%%a):\l%a",0
|
||||
|
||||
fond db 16,'Ceci est un fond'
|
||||
textdemo1 db '\c05Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling\l',0
|
||||
textdemo2 db '\c07Vertical Vertical Vertical Vertical Vertical Vertical Vertical Vertical\l',0
|
||||
textdemo3 db '\c09Rapide Rapide Rapide Rapide Rapide Rapide Rapide Rapide\l',0
|
||||
texte1 db 'Echange rapide de pages Vid‚o',0
|
||||
texte2 db '\g04,13Routine d''affichage Ultra Rapide Agissant sur le Mat‚riel'
|
||||
db '\g04,14Possibilit‚ de r‚aliser des effets de superposition',0
|
||||
texte3 db '\c04%bD\l',0
|
||||
texte4 db '\g01,00Sauvegarde et restauration de l''ecran (%%s/%%r)',0
|
||||
|
||||
showstring2:
|
||||
push es bx cx si di
|
||||
@ -368,6 +195,9 @@ strinaize4:
|
||||
pop di si cx bx es
|
||||
ret
|
||||
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
dw 0
|
||||
|
||||
end start
|
||||
|
@ -1,151 +1,113 @@
|
||||
.model tiny
|
||||
.386c
|
||||
.code
|
||||
org 0100h
|
||||
org 0h
|
||||
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
mov ax,0002
|
||||
int 47H
|
||||
mov ah,26
|
||||
int 47H
|
||||
replay:
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
xor di,di
|
||||
xor cx,cx
|
||||
mov ah,20
|
||||
mov bx,1D00h
|
||||
mov si,offset Msg
|
||||
int 47h
|
||||
mov ah,20
|
||||
mov bx,0231h
|
||||
mov si,offset msgapp
|
||||
int 47h
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
|
||||
realstart:
|
||||
mov ah,28h
|
||||
int 47h
|
||||
push offset msg
|
||||
call [print]
|
||||
mov bp,1000h
|
||||
xor di,di
|
||||
xor cx,cx
|
||||
xor edx,edx
|
||||
VerifAll:
|
||||
mov ah,1
|
||||
int 16h
|
||||
cmp al,32
|
||||
je enend
|
||||
mov ax,cx
|
||||
mov si,100
|
||||
mul si
|
||||
mov si,2880
|
||||
div si
|
||||
xor edx,edx
|
||||
mov dx,ax
|
||||
mov ah,15
|
||||
mov bx,0A14h
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset po
|
||||
int 47h
|
||||
mov ah,15
|
||||
mov dx,cx
|
||||
mov bx,0A10h
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset Msg2
|
||||
int 47h
|
||||
mov ah,8
|
||||
mov edx,0
|
||||
mov dx,di
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset Msg3
|
||||
int 47h
|
||||
call gauge
|
||||
mov ah,2
|
||||
int 48h
|
||||
jc errors
|
||||
je noprob
|
||||
inc di
|
||||
noprob:
|
||||
inc cx
|
||||
cmp cx,2880
|
||||
jnz verifall
|
||||
mov ah,1
|
||||
int 16h
|
||||
jz nokey
|
||||
cmp al,' '
|
||||
je enend
|
||||
nokey:
|
||||
mov dx,di
|
||||
push edx
|
||||
mov dx,cx
|
||||
inc dx
|
||||
push edx
|
||||
mov ax,cx
|
||||
inc ax
|
||||
mov si,100
|
||||
mul si
|
||||
mov si,2880
|
||||
div si
|
||||
mov dx,ax
|
||||
push edx
|
||||
push offset msg2
|
||||
call [print]
|
||||
call gauge
|
||||
mov ah,2
|
||||
int 48h
|
||||
jc errors
|
||||
je noprob
|
||||
inc di
|
||||
noprob:
|
||||
inc cx
|
||||
cmp cx,2880
|
||||
jnz verifall
|
||||
enend:
|
||||
cmp di,0
|
||||
je noatall
|
||||
mov bx,0E09h
|
||||
mov ah,20
|
||||
mov si,offset error2
|
||||
int 47h
|
||||
jmp someof
|
||||
noatall:
|
||||
mov bx,0E09h
|
||||
mov ah,20
|
||||
mov si,offset noerror
|
||||
int 47h
|
||||
someof:
|
||||
mov ah,0
|
||||
int 16h
|
||||
mov ah,27
|
||||
int 47h
|
||||
db 0CBH
|
||||
errors:
|
||||
mov ah,21
|
||||
mov cl,4
|
||||
int 47h
|
||||
mov bx,0D09h
|
||||
mov ah,20
|
||||
mov si,offset errore
|
||||
int 47h
|
||||
mov ah,0
|
||||
int 16h
|
||||
jmp replay
|
||||
cmp di,0
|
||||
je noatall
|
||||
push offset error2
|
||||
call [print]
|
||||
jmp someof
|
||||
noatall:
|
||||
push offset noerror
|
||||
call [print]
|
||||
someof:
|
||||
mov ah,0
|
||||
int 16h
|
||||
mov ah,29h
|
||||
int 47H
|
||||
retf
|
||||
errors:
|
||||
push offset error
|
||||
call [print]
|
||||
mov ah,0
|
||||
int 16h
|
||||
mov ah,29h
|
||||
int 47H
|
||||
retf
|
||||
|
||||
|
||||
|
||||
errore db 'Erreur avec le lecteur de disquette !',0
|
||||
noerror db 'Pas de secteurs defectueux, appuyez sur une touche pour continuer',0
|
||||
error2 db 'Le disque est defectueux, appuyez sur une touche pour quitter',0
|
||||
po db ' %',0
|
||||
msgapp db '<Pressez espace pour quitter>',0
|
||||
msg db '- Test de surface du disque -',0
|
||||
msg2 db ' cluster tested. ',0
|
||||
msg3 db ' cluster defectueux. ',0
|
||||
;->Increment CX
|
||||
error db '\g10,10Erreur avec le lecteur de disquette !',0
|
||||
error2 db '\g10,10Le disque est defectueux, appuyez sur une touche pour quitter',0
|
||||
noerror db '\g10,10Pas de secteurs defectueux, appuyez sur une touche pour continuer',0
|
||||
msg db '\m02\e\c07\g29,00- Test de surface du disque -\g02,49<Pressez espace pour quitter>',0
|
||||
msg2 db '\g10,20%u %%\g10,16%u cluster testes. \h34%u cluster defectueux. ',0
|
||||
|
||||
gauge:
|
||||
push ax bx cx dx si ds
|
||||
push cs
|
||||
pop ds
|
||||
mov ax,cx
|
||||
mul sizes
|
||||
div max
|
||||
mov dx,ax
|
||||
mov bl,oldvalue
|
||||
xor bh,bh
|
||||
mov byte ptr [offset gaugetxt+bx],'Û'
|
||||
cmp bx,0
|
||||
jnz nono2
|
||||
mov ah,21
|
||||
mov cl,8
|
||||
int 47h
|
||||
mov bx,xy
|
||||
mov ah,20
|
||||
mov si,offset gaugetxt
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
nono2:
|
||||
mov bx,dx
|
||||
xor bh,bh
|
||||
mov byte ptr [offset gaugetxt+bx],0
|
||||
mov oldvalue,bl
|
||||
mov bx,xy
|
||||
mov ah,20
|
||||
mov si,offset gaugetxt
|
||||
int 47h
|
||||
pop ds si dx cx bx ax
|
||||
ret
|
||||
oldvalue db 0
|
||||
max dw 2880
|
||||
sizes dw 50
|
||||
xy dw 0A12h
|
||||
gaugetxt db 'ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ',0
|
||||
push ax dx
|
||||
mov ax,cx
|
||||
mul sizeof
|
||||
div max
|
||||
xor edx,edx
|
||||
mov dx,sizeof
|
||||
sub dx,ax
|
||||
push dx
|
||||
push 'Û'
|
||||
mov dx,ax
|
||||
push dx
|
||||
push 'Û'
|
||||
push offset gauges
|
||||
call [print]
|
||||
pop dx ax
|
||||
retn
|
||||
|
||||
max dw 2879
|
||||
sizeof dw 50
|
||||
|
||||
gauges db '\g10,18\c05%cM\c07%cM',0
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
dw 0
|
||||
|
||||
End Start
|
||||
|
@ -1,13 +1,21 @@
|
||||
.model tiny
|
||||
.386c
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
|
||||
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
|
||||
realstart:
|
||||
mov ax,0305h
|
||||
mov bx,0008h
|
||||
int 16h
|
||||
mov ah,28h
|
||||
int 47H
|
||||
mov ax,0002
|
||||
int 47H
|
||||
mov ah,2
|
||||
@ -15,6 +23,10 @@ start:
|
||||
mov ah,43
|
||||
int 47h
|
||||
xor bp,bp
|
||||
push cs
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
Adres:
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
@ -24,7 +36,7 @@ Adres:
|
||||
pop es
|
||||
mov cx,sect
|
||||
mov di,offset buffer
|
||||
mov ax,0001h
|
||||
mov ah,0h
|
||||
int 48h
|
||||
jnc noerror
|
||||
errtr:
|
||||
@ -32,12 +44,8 @@ Adres:
|
||||
mov bl,infos
|
||||
xor bh,bh
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,116
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset errordisk
|
||||
int 47h
|
||||
push offset errordisk
|
||||
call [print]
|
||||
mov ax,0
|
||||
int 16h
|
||||
noerror:
|
||||
@ -65,52 +73,32 @@ Adres:
|
||||
int 47h
|
||||
mov bh,infos
|
||||
mov di,bp
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
lines:
|
||||
mov dx,sect
|
||||
mov cx,16
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov si,offset dep
|
||||
mov ah,13
|
||||
int 47h
|
||||
xor edx,edx
|
||||
mov dx,di
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset spaces
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
push edx
|
||||
mov dx,sect
|
||||
push edx
|
||||
push offset spaces
|
||||
call [print]
|
||||
mov al,infos+1
|
||||
mov cl,7
|
||||
mov ah,21
|
||||
int 47h
|
||||
mov si,di
|
||||
doaline:
|
||||
mov dl,[di+offset buffer]
|
||||
mov ah,10
|
||||
mov cl,8
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
push dword ptr [di+offset buffer]
|
||||
push 8
|
||||
call [showhex]
|
||||
push ' '
|
||||
call [showchar]
|
||||
inc di
|
||||
dec al
|
||||
jnz doaline
|
||||
mov di,si
|
||||
mov si,offset spaces
|
||||
mov ah,13
|
||||
int 47h
|
||||
push offset spaces2
|
||||
call [print]
|
||||
mov al,infos+1
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
doaline2:
|
||||
mov dl,[di+offset buffer]
|
||||
mov ah,7
|
||||
int 47h
|
||||
push word ptr [di+offset buffer]
|
||||
call [showchar]
|
||||
inc di
|
||||
dec al
|
||||
jnz doaline2
|
||||
@ -122,14 +110,12 @@ doaline2:
|
||||
int 47h
|
||||
jmp lines
|
||||
outes:
|
||||
mov ah,21
|
||||
mov cl,112
|
||||
int 47h
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
mov si,offset menu
|
||||
mov ah,14h
|
||||
mov ah,25
|
||||
int 47h
|
||||
push offset menu
|
||||
call [print]
|
||||
waitkey:
|
||||
mov ax,0
|
||||
int 16h
|
||||
@ -177,19 +163,12 @@ outes:
|
||||
cmp ax,4100h
|
||||
jne suit7
|
||||
mov dword ptr [pope],'TIDE'
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
xor bh,bh
|
||||
mov ah,25
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,116
|
||||
int 47h
|
||||
mov si,offset menu
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
push offset menu
|
||||
call [print]
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov xxyy2,3
|
||||
@ -203,9 +182,9 @@ waitst:
|
||||
jne tre
|
||||
mov dword ptr [pope],'WEIV'
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
mov cx,sect
|
||||
mov bx,offset buffer
|
||||
mov si,offset buffer
|
||||
mov ah,1
|
||||
int 48h
|
||||
jnc adres
|
||||
@ -282,8 +261,9 @@ cursor:
|
||||
suit7:
|
||||
cmp ax,4200h
|
||||
jne adres2
|
||||
db 0CBH
|
||||
ret
|
||||
mov ah,29h
|
||||
int 47H
|
||||
retf
|
||||
|
||||
calc1:
|
||||
push ax dx si
|
||||
@ -292,7 +272,7 @@ calc1:
|
||||
shl ax,2
|
||||
shl dx,1
|
||||
add ax,dx
|
||||
add ax,25
|
||||
add ax,27
|
||||
mov bx,YY
|
||||
mov dx,yy
|
||||
shl bx,5
|
||||
@ -315,6 +295,7 @@ calc2:
|
||||
shl si,5
|
||||
shl dx,7
|
||||
add si,dx
|
||||
add si,2
|
||||
mov dx,xx
|
||||
shl dx,1
|
||||
add si,dx
|
||||
@ -366,15 +347,27 @@ xx dw 0
|
||||
yy dw 0
|
||||
xxyy dw 3
|
||||
xxyy2 dw 3
|
||||
errordisk db 'Une erreur est apparue sur le lecteur, appuyez sur une touche ',0
|
||||
menu db 'Haut&Bas [F1/2] Secteur [F3/4] Charger/Sauver [F5/6] Mode [F7] Quit. [F8] '
|
||||
pope db 'VIEW',0
|
||||
spaces db ' ³ ',0
|
||||
|
||||
errordisk db '\c74Une erreur est apparue sur le lecteur, appuyez sur une touche ',0
|
||||
menu db '\c70Haut&Bas [F1/2] Secteur [F3/4] Charger/Sauver [F5/6] Mode [F7] Quit. [F8] '
|
||||
pope db 'VUE ',0
|
||||
spaces db '\c02%hW:%hW \c04| \c07',0
|
||||
spaces2 db '\c04 | \c07',0
|
||||
|
||||
showbuffer db 35 dup (0FFh)
|
||||
oldmode db 0
|
||||
infos db 40 dup (0)
|
||||
buffer equ $
|
||||
buffer db 2048 dup (0)
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
db "VIDEO.LIB::showhex",0
|
||||
showhex dd 0
|
||||
db "VIDEO.LIB::showchar",0
|
||||
showchar dd 0
|
||||
dw 0
|
||||
|
||||
|
||||
end start
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user