Compare commits
112 Commits
master
...
feature/te
Author | SHA1 | Date |
---|---|---|
Nicolas Hordé | dcc8d09fcf | |
Nicolas Hordé | 44992d56af | |
Nicolas Hordé | bd7b31f95f | |
Nicolas Hordé | 465618e4d6 | |
Nicolas Hordé | 7b1d14b6a6 | |
Nicolas Hordé | da48430341 | |
Nicolas Hordé | e8f7d8a1e7 | |
Nicolas Hordé | 8d0fd22134 | |
Nicolas Hordé | 9e47321c92 | |
Nicolas Hordé | 2eee63e178 | |
Nicolas Hordé | f86bd67d51 | |
Nicolas Hordé | bbf2e656c9 | |
Nicolas Hordé | f35d742f27 | |
Nicolas Hordé | 17228ba373 | |
Nicolas Hordé | 23d5c9f89d | |
Nicolas Hordé | 50ac83fe99 | |
Nicolas Hordé | 630a9b95d2 | |
Nicolas Hordé | 17a79d2e83 | |
Nicolas Hordé | c81bd038c7 | |
Nicolas Hordé | be9b278fdf | |
Nicolas Hordé | 970aeeb0a2 | |
Nicolas Hordé | 81e2660033 | |
Nicolas Hordé | 517222ec54 | |
Nicolas Hordé | e46b38631b | |
Nicolas Hordé | 2c7b28df93 | |
Nicolas Hordé | 2955cca945 | |
Nicolas Hordé | ea9ab47d47 | |
Nicolas Hordé | bdcfa07476 | |
Nicolas Hordé | 95140e4da4 | |
Nicolas Hordé | e23b67afd0 | |
Nicolas Hordé | db544a7cbe | |
Nicolas Hordé | ab40064c1f | |
Nicolas Hordé | b9250f34ee | |
Nicolas Hordé | 676c3ca407 | |
Nicolas Hordé | 7c0c00a696 | |
Nicolas Hordé | dd7a8c05ee | |
Nicolas Hordé | e1b6696324 | |
Nicolas Hordé | 2f20a86d11 | |
Nicolas Hordé | 4e91970166 | |
Nicolas Hordé | 5af55420ca | |
Nicolas Hordé | 2791d5868e | |
Nicolas Hordé | 1ba80b5b98 | |
Nicolas Hordé | 13f6476a96 | |
Nicolas Hordé | d911b9f44b | |
Nicolas Hordé | 368d613e9f | |
Nicolas Hordé | 8abfe12dcb | |
Nicolas Hordé | fa8dcc4442 | |
Nicolas Hordé | 3942d63f1e | |
Nicolas Hordé | cc272f8bff | |
Nicolas Hordé | fb3a734cd2 | |
Nicolas Hordé | 8f2ddfdab7 | |
Nicolas Hordé | f8a1b7f118 | |
Nicolas Hordé | 88c44c06ea | |
Nicolas Hordé | 52808d4c15 | |
Nicolas Hordé | a4e2e8f650 | |
Nicolas Hordé | d2507210c9 | |
Nicolas Hordé | c6db694ba2 | |
Nicolas Hordé | 08cd618e46 | |
Nicolas Hordé | c4cfd2b05c | |
Nicolas Hordé | def6ea675d | |
Nicolas Hordé | 1f1e1628b1 | |
Nicolas Hordé | 1d17c0fc92 | |
Nicolas Hordé | 1742c77553 | |
Nicolas Hordé | 35af9ebbed | |
Nicolas Hordé | 694f7cf605 | |
Nicolas Hordé | a7c923e5fb | |
Nicolas Hordé | 1d3ce9c6e6 | |
Nicolas Hordé | 2e23d3853b | |
Nicolas Hordé | 2b1f562890 | |
Nicolas Hordé | d352c80b5d | |
Nicolas Hordé | dcb2c5a203 | |
Nicolas Hordé | 226db1c980 | |
Nicolas Hordé | ede79c0bd9 | |
Nicolas Hordé | 79296d337d | |
Nicolas Hordé | 3218661366 | |
Nicolas Hordé | c83c7cf1fe | |
Nicolas Hordé | 85ea3e1514 | |
Nicolas Hordé | a756911670 | |
Nicolas Hordé | 2dba1d4217 | |
Nicolas Hordé | a7110cd360 | |
Nicolas Hordé | 33abc91a3e | |
Nicolas Hordé | 1582591ab8 | |
Nicolas Hordé | 2a1dd56ef4 | |
Nicolas Hordé | abb4ab5b5a | |
Nicolas Hordé | f145c0617c | |
Nicolas Hordé | 780f0d4287 | |
Nicolas Hordé | cda46c39be | |
Nicolas Hordé | 171ec40b83 | |
Nicolas Hordé | a733711bc2 | |
Nicolas Hordé | 48fd1d4ca3 | |
Nicolas Hordé | a646265760 | |
Nicolas Hordé | 474e2aedbb | |
Nicolas Hordé | ef63b674bd | |
Nicolas Hordé | cccc113a35 | |
Nicolas Hordé | d61a193186 | |
Nicolas Hordé | a0c5c481fd | |
Nicolas Hordé | d37324ac00 | |
Nicolas Hordé | dec9675b7d | |
Nicolas Hordé | e8e82d8713 | |
Nicolas Hordé | f8f8bdfff3 | |
Nicolas Hordé | fe2558dda0 | |
Nicolas Hordé | d539bd2d8c | |
Nicolas Hordé | d920b35473 | |
Nicolas Hordé | 4d03b78533 | |
Nicolas Hordé | b0cf779a88 | |
Nicolas Hordé | a9f30e0e43 | |
Nicolas Hordé | c1d24b71fe | |
Nicolas Hordé | 8cc5b8aa70 | |
Nicolas Hordé | 25420a02cc | |
Nicolas Hordé | 626ce27670 | |
Nicolas Hordé | a126bbdf55 | |
Nicolas Hordé | a845b77632 |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 111 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 126 KiB |
1432
INFORMATIONS.md
34
MAKEFILE
|
@ -11,9 +11,31 @@ all:
|
|||
make
|
||||
cd ..
|
||||
|
||||
copy:
|
||||
make all
|
||||
cd commande
|
||||
make
|
||||
cd ..
|
||||
|
||||
cd programs
|
||||
make
|
||||
cd ..
|
||||
|
||||
install:
|
||||
if not exist data mkdir data
|
||||
copy noyau\systeme.sys data
|
||||
copy noyau\boot.bin data
|
||||
copy commande\commande.ce data
|
||||
copy lib\*.lib data
|
||||
copy programs\*.ce data
|
||||
copy programs\exem-lib.lib data
|
||||
copy programs\cos.rip data
|
||||
copy install\setup.com .
|
||||
|
||||
copy: clean all
|
||||
copy noyau\systeme.sys b:
|
||||
copy commande\*.ce b:
|
||||
copy lib\*.lib b:
|
||||
copy programs\*.ce b:
|
||||
copy programs\*.lib b:
|
||||
|
||||
clean:
|
||||
cd lib
|
||||
|
@ -27,3 +49,11 @@ clean:
|
|||
cd install
|
||||
make clean
|
||||
cd ..
|
||||
|
||||
cd commande
|
||||
make clean
|
||||
cd ..
|
||||
|
||||
cd programs
|
||||
make clean
|
||||
cd ..
|
|
@ -2,12 +2,14 @@
|
|||
|
||||
## Copies d'écran de COS2000
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/bootnew.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/ceexplorer.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/chargement.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/dir.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/editeur.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/gestionnaire.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/installation.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/interpreteur.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/librairies.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/logo.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/pci.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/video.jpg)
|
||||
|
|
|
@ -1,17 +1,20 @@
|
|||
lnk_boot = tlink /x
|
||||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
asm= lzasm /z/t
|
||||
lnk= elink
|
||||
|
||||
all: commande.exe
|
||||
all: commande.ce
|
||||
|
||||
commande.exe: commande.asm str0.asm
|
||||
$(asm) commande
|
||||
$(lnk) commande
|
||||
ren commande.com commande.exe
|
||||
commande.ce: commande.obj
|
||||
$(lnk) commande.obj commande.ce
|
||||
|
||||
commande.obj: commande.asm
|
||||
$(asm) commande.asm
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.ce
|
||||
del *.bak
|
||||
del *.lib
|
||||
del *.com
|
||||
del *.bin
|
||||
del *.sys
|
||||
del *.err
|
|
@ -1,857 +0,0 @@
|
|||
;Librairie qui prend en charge le format de STR ASCIIZ
|
||||
;# nombre 8
|
||||
;@ str 7
|
||||
;& nom 6
|
||||
|
||||
;High Low
|
||||
;0 variable 4 hex
|
||||
;1 byte 3 dec
|
||||
;2 word 2 oct
|
||||
;3 3 octets 1 bin
|
||||
;4 dword 5 adresse
|
||||
;5 5 octets 6 nom
|
||||
;6 ... 7 str
|
||||
; 8 nombre
|
||||
|
||||
|
||||
;Renvoie carry si la syntaxe de ds:si n'est pas respect‚ par rapport a es:di
|
||||
CheckSyntax0:
|
||||
push ax bx dx bp si di ds es
|
||||
push es di
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset temp2
|
||||
call copy0
|
||||
mov si,di
|
||||
push cs
|
||||
pop ds
|
||||
pop di es
|
||||
call getdelimiter0
|
||||
mov bp,dx
|
||||
mov dl,' '
|
||||
call setdelimiter0
|
||||
call compressdelimiter0
|
||||
call uppercase0
|
||||
call getnbitems0
|
||||
;call xch
|
||||
;mov ax,cx
|
||||
;call getnbitem0
|
||||
;call xch
|
||||
;cmp ax,cx
|
||||
;call xch
|
||||
;jne notequalatall
|
||||
mov bx,cx
|
||||
xor cx,cx
|
||||
itemer:
|
||||
call whatisitem0
|
||||
mov dx,ax
|
||||
call xch
|
||||
call whatisitem0
|
||||
call xch
|
||||
cmp ax,dx
|
||||
jne prob
|
||||
cmp al,6
|
||||
jb equal
|
||||
call cmpitems0
|
||||
je equal
|
||||
prob:
|
||||
cmp dl,4
|
||||
ja nosize
|
||||
cmp al,8
|
||||
je equal
|
||||
cmp al,4
|
||||
jne notequalatall
|
||||
cmp dh,ah
|
||||
ja notequalatall
|
||||
jmp equal
|
||||
nosize:
|
||||
cmp al,7
|
||||
jne noname
|
||||
cmp ah,0
|
||||
jne notequalatall
|
||||
jmp equal
|
||||
noname:
|
||||
cmp al,8
|
||||
je equal
|
||||
jmp notequalatall
|
||||
equal:
|
||||
inc cx
|
||||
cmp cx,bx
|
||||
jne itemer
|
||||
cld
|
||||
ackno:
|
||||
mov dx,bp
|
||||
call setdelimiter0
|
||||
pop es ds di si bp dx bx ax
|
||||
ret
|
||||
notequalatall:
|
||||
stc
|
||||
jmp ackno
|
||||
xch:
|
||||
push ds
|
||||
push es
|
||||
pop ds
|
||||
pop es
|
||||
xchg si,di
|
||||
ret
|
||||
|
||||
temp2 db 256 dup (0)
|
||||
|
||||
;Compare les ‚l‚ments cx de deux chaine ds:si et es:di
|
||||
Cmpitems0:
|
||||
push cx dx si di
|
||||
push cx di
|
||||
call getpointeritem0
|
||||
mov si,di
|
||||
xor cx,cx
|
||||
inc cx
|
||||
call getpointeritem0
|
||||
mov dx,di
|
||||
sub dx,si
|
||||
dec cx
|
||||
pop di cx
|
||||
push ds si
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
call getpointeritem0
|
||||
pop si ds
|
||||
mov cx,dx
|
||||
rep cmpsb
|
||||
pop di si dx cx
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;Renvoie l'‚l‚ment cx de ds:si dans edx si nb et dans es:di si str ou name
|
||||
gettypeditem0:
|
||||
push bx cx si
|
||||
call getpointeritem0
|
||||
mov si,di
|
||||
xor cx,cx
|
||||
inc cl
|
||||
call getpointeritem0
|
||||
mov bx,di
|
||||
dec bx
|
||||
mov cl,0
|
||||
xchg cl,ds:[bx]
|
||||
call gettyped0
|
||||
xchg cl,ds:[bx]
|
||||
pop si cx bx
|
||||
ret
|
||||
|
||||
;Renvoie ds:si dans edx si nb et dans es:di si str ou name
|
||||
gettyped0:
|
||||
push ax
|
||||
call whatis0
|
||||
cmp al,5
|
||||
jb number
|
||||
cmp al,6
|
||||
je pointer
|
||||
push ds
|
||||
pop es
|
||||
call getpointeritem0
|
||||
jmp endofGettypeditem0
|
||||
number:
|
||||
mov edx,cs:lastnumber
|
||||
jmp endofgettypeditem0
|
||||
pointer:
|
||||
call str0toadress
|
||||
endofgettypeditem0:
|
||||
pop ax
|
||||
ret
|
||||
|
||||
;Renvoie dans ax le type de la str0 point‚e par ds:si ‚l‚ment cx
|
||||
whatisitem0:
|
||||
push bx cx si di
|
||||
call getpointeritem0
|
||||
mov si,di
|
||||
xor cx,cx
|
||||
inc cl
|
||||
call getpointeritem0
|
||||
mov bx,di
|
||||
dec bx
|
||||
mov cl,0
|
||||
xchg cl,ds:[bx]
|
||||
call whatis0
|
||||
xchg cl,ds:[bx]
|
||||
pop di si cx bx
|
||||
ret
|
||||
|
||||
;Renvoie dans ax le type de la str0 point‚e par ds:si
|
||||
;High Low
|
||||
;0 variable 4 hex
|
||||
;1 byte 3 dec
|
||||
;2 word 2 oct
|
||||
;3 3 octets 1 bin
|
||||
;4 dword 5 adresse
|
||||
;5 5 octets 6 name
|
||||
;6 ... 7 str
|
||||
whatis0:
|
||||
push bx cx edx
|
||||
mov cl,2
|
||||
call str0isbase
|
||||
jnc finbase
|
||||
mov cl,8
|
||||
call str0isbase
|
||||
jnc finbase
|
||||
mov cl,10
|
||||
call str0isbase
|
||||
jnc finbase
|
||||
mov cl,16
|
||||
call str0isbase
|
||||
jc testadress
|
||||
finbase:
|
||||
mov bx,cx
|
||||
xor ch,ch
|
||||
mov al,cs:[bx+offset basenn-2]
|
||||
call str0toint
|
||||
mov cs:Lastnumber,edx
|
||||
cmp edx,0000FFFFh
|
||||
ja bits32
|
||||
cmp dx,00FFh
|
||||
ja bits16
|
||||
mov ah,1
|
||||
jmp endofwhat
|
||||
bits16:
|
||||
mov ah,2
|
||||
jmp endofwhat
|
||||
bits32:
|
||||
mov ah,3
|
||||
jmp endofwhat
|
||||
testadress:
|
||||
call str0isadress
|
||||
jc testname
|
||||
mov ax,0005h
|
||||
jmp endofwhat
|
||||
testname:
|
||||
;call str0isname
|
||||
;jc testvarstr
|
||||
;jnc isok
|
||||
;mov al,06h
|
||||
cmp byte ptr [si],'&'
|
||||
jne testvarstr
|
||||
mov al,06h
|
||||
call getlength0
|
||||
dec cl
|
||||
mov ah,cl
|
||||
jmp endofwhat
|
||||
testvarstr:
|
||||
cmp byte ptr [si],'@'
|
||||
jne testnumber
|
||||
mov al,07h
|
||||
call getlength0
|
||||
dec cl
|
||||
mov ah,cl
|
||||
jmp endofwhat
|
||||
testnumber:
|
||||
cmp byte ptr [si],'#'
|
||||
jne isstr
|
||||
mov al,8
|
||||
call getlength0
|
||||
dec cl
|
||||
mov ah,cl
|
||||
jmp endofwhat
|
||||
isstr:
|
||||
mov al,07h
|
||||
call getlength0
|
||||
mov ah,cl
|
||||
endofwhat:
|
||||
pop edx cx bx
|
||||
ret
|
||||
|
||||
Lastnumber dd 0
|
||||
|
||||
;Renvoie non carry si la str ds:si point‚e peut ˆtre une adresse
|
||||
str0isadress:
|
||||
;push
|
||||
stc
|
||||
;pop
|
||||
ret
|
||||
|
||||
;Renvoie en es:di le pointeur str0 ds:si
|
||||
Str0toAdress:
|
||||
;push
|
||||
stc
|
||||
;pop
|
||||
ret
|
||||
|
||||
;Renvoie non carry si la str ds:si point‚e peut ˆtre un nom de fichier
|
||||
str0isname:
|
||||
push ax si di
|
||||
isname:
|
||||
mov al,[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je itsok
|
||||
mov di,offset non
|
||||
verify:
|
||||
mov ah,[di]
|
||||
inc di
|
||||
cmp ah,0FFh
|
||||
je isname
|
||||
cmp ah,al
|
||||
jne verify
|
||||
stc
|
||||
jmp itsdead
|
||||
itsok:
|
||||
clc
|
||||
itsdead:
|
||||
pop di si ax
|
||||
ret
|
||||
|
||||
non db '/<>|"?*:\',01,0FFh
|
||||
|
||||
;Renvoie non carry si le texte point‚ par si est de la base cl
|
||||
str0isbase:
|
||||
push ax cx si di es
|
||||
push cs
|
||||
pop es
|
||||
mov ah,cl
|
||||
isstrbase:
|
||||
mov al,[si]
|
||||
cmp al,0
|
||||
je okbase
|
||||
mov cl,ah
|
||||
xor ch,ch
|
||||
mov di,cx
|
||||
cmp al,es:[di-2+offset basen]
|
||||
je verifbase
|
||||
xor ch,ch
|
||||
inc cl
|
||||
mov di,offset base
|
||||
cld
|
||||
repne scasb
|
||||
cmp cx,0
|
||||
je nobase
|
||||
inc si
|
||||
jmp isstrbase
|
||||
okbase:
|
||||
clc
|
||||
endbase:
|
||||
pop es di si cx ax
|
||||
ret
|
||||
verifbase:
|
||||
cmp byte ptr [si+1],0
|
||||
je okbase
|
||||
nobase:
|
||||
stc
|
||||
jmp endbase
|
||||
|
||||
temp dw 0
|
||||
|
||||
;Converti un str de base cl en int dans edx
|
||||
str0toint:
|
||||
push eax bx ecx si edi ebp es
|
||||
push cs
|
||||
pop es
|
||||
mov ah,cl
|
||||
mov cs:temp,si
|
||||
gotos:
|
||||
cmp byte ptr [si+1], 0
|
||||
je oklo
|
||||
inc si
|
||||
jmp gotos
|
||||
oklo:
|
||||
mov edi,1
|
||||
xor ebp,ebp
|
||||
mov bl,cl
|
||||
baseto:
|
||||
cmp si,cs:temp
|
||||
jb endbaseto
|
||||
mov al,[si]
|
||||
xor ecx,ecx
|
||||
mov cl,bl
|
||||
inc cl
|
||||
push di
|
||||
mov di,offset base
|
||||
cld
|
||||
repne scasb
|
||||
pop di
|
||||
jne noop
|
||||
sub cl,bl
|
||||
neg cl
|
||||
mov eax,edi
|
||||
mul ecx
|
||||
add ebp,eax
|
||||
mov eax,edi
|
||||
mov cl,bl
|
||||
mul ecx
|
||||
mov edi,eax
|
||||
noop:
|
||||
dec si
|
||||
jmp baseto
|
||||
endbaseto:
|
||||
mov edx,ebp
|
||||
pop es ebp edi si ecx bx eax
|
||||
ret
|
||||
base db '0123456789ABCDEF'
|
||||
basen db 'B O D H'
|
||||
basenn db 1,0,0,0,0,0,2,0,3,0,0,0,0,0,4
|
||||
|
||||
;Renvoie en es:di la partie de cx caractŠres a partir de la gauche de ds:si
|
||||
Left0:
|
||||
push ax cx si di
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;Renvoie en es:di la partie de cx caractŠres a partir de la droite de ds:si
|
||||
Right0:
|
||||
push ax cx dx si di
|
||||
mov dx,cx
|
||||
call getlength0
|
||||
add si,cx
|
||||
sub si,dx
|
||||
mov cx,dx
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si dx cx ax
|
||||
ret
|
||||
|
||||
;Renvoie en es:di la partie de cx caractŠres a partir de la position bx de ds:si
|
||||
middle0:
|
||||
push ax cx si di
|
||||
add si,bx
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;Rempli de cx caractŠres dl a partir de la position bx de ds:si
|
||||
Fill0:
|
||||
push ax bx cx si di es
|
||||
push ds
|
||||
pop es
|
||||
add si,bx
|
||||
mov al,dl
|
||||
mov di,si
|
||||
cld
|
||||
rep stosb
|
||||
pop es di si cx bx ax
|
||||
ret
|
||||
|
||||
;Remplace tout les caractŠres al de ds:si par des caractŠres dl
|
||||
ReplaceAllchar0:
|
||||
push ax cx di es
|
||||
call GetLength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
findandchange:
|
||||
repne scasb
|
||||
cmp cx,0
|
||||
je endofchange
|
||||
mov es:[di-1],dl
|
||||
jmp findandchange
|
||||
endofchange:
|
||||
pop es di cx ax
|
||||
ret
|
||||
|
||||
|
||||
;Recherche un caractŠre dl dans la chaŒne ds:si
|
||||
SearchChar0:
|
||||
push ax cx di es
|
||||
call GetLength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,dl
|
||||
repne scasb
|
||||
pop es di cx ax
|
||||
ret
|
||||
|
||||
;Inverse la chaine point‚e en ds:si
|
||||
invert0:
|
||||
push ax cx si di es
|
||||
call GetLength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
add di,cx
|
||||
dec di
|
||||
revert:
|
||||
mov al,[si]
|
||||
xchg al,es:[di]
|
||||
mov [si],al
|
||||
inc si
|
||||
dec di
|
||||
cmp si,di
|
||||
je finishinvert
|
||||
dec di
|
||||
cmp si,di
|
||||
je finishinvert
|
||||
inc di
|
||||
jmp revert
|
||||
finishinvert:
|
||||
pop es di si cx ax
|
||||
ret
|
||||
|
||||
;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal
|
||||
cmpstr0:
|
||||
push cx dx si di
|
||||
call GetLength0
|
||||
mov dx,cx
|
||||
push ds si
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
call GetLength0
|
||||
pop si ds
|
||||
cmp cx,dx
|
||||
jne NotEqual
|
||||
repe cmpsb
|
||||
NotEqual:
|
||||
pop di si dx cx
|
||||
ret
|
||||
|
||||
;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal et renvoie le nb de caractŠre egaux dans dx
|
||||
evalue0:
|
||||
push cx si di
|
||||
push ds si
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
call GetLength0
|
||||
pop si ds
|
||||
mov dx,cx
|
||||
repe cmpsb
|
||||
pushf
|
||||
sub dx,cx
|
||||
popf
|
||||
pop di si cx
|
||||
ret
|
||||
|
||||
|
||||
;Insert une chaine ds:si en es:di a partir du caractŠre cx
|
||||
insert0:
|
||||
push cx di si
|
||||
add di,cx
|
||||
call getlength0
|
||||
push si di ds
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
add di,cx
|
||||
call copy20
|
||||
pop ds di si
|
||||
cld
|
||||
inc di
|
||||
rep movsb
|
||||
pop si di cx
|
||||
ret
|
||||
|
||||
;Detruit CX caractŠres a partir du caractŠre BX de DS:SI
|
||||
delete0:
|
||||
push cx dx si di es
|
||||
push ds
|
||||
pop es
|
||||
mov dx,cx
|
||||
call getlength0
|
||||
sub cx,dx
|
||||
sub cx,bx
|
||||
inc cx
|
||||
add si,bx
|
||||
mov di,si
|
||||
add si,dx
|
||||
cld
|
||||
rep movsb
|
||||
pop es di si dx cx
|
||||
ret
|
||||
|
||||
;Copie une chaine de ds:si en es:di
|
||||
Copy0:
|
||||
push ax cx si di
|
||||
call GetLength0
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;Copie une chaine de ds:si en es:di
|
||||
Copy20:
|
||||
push ax cx si di
|
||||
call GetLength0
|
||||
cld
|
||||
add si,cx
|
||||
add di,cx
|
||||
inc cx
|
||||
std
|
||||
rep movsb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;ConcatŠne le chaine ds:si avec es:di
|
||||
Concat0:
|
||||
push ax cx dx si di
|
||||
call GetLength0
|
||||
mov dx,cx
|
||||
xchg si,di
|
||||
push ds
|
||||
push es
|
||||
pop ds
|
||||
call GetLength0
|
||||
pop ds
|
||||
xchg si,di
|
||||
add di,cx
|
||||
mov cx,dx
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si dx cx ax
|
||||
ret
|
||||
|
||||
;Met DL comme d‚limiteur par d‚faut
|
||||
SetDelimiter0:
|
||||
mov cs:delim,dl
|
||||
ret
|
||||
|
||||
;Renvoie le d‚limiteur par d‚faut dans dl
|
||||
GetDelimiter0:
|
||||
mov dl,cs:delim
|
||||
ret
|
||||
delim db 0
|
||||
|
||||
;D‚truit les d‚limiteur qui sont cons‚cutifs dans ds:si
|
||||
CompressDelimiter0:
|
||||
push ax dx si di es
|
||||
call Getlength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,cs:delim
|
||||
xor dx,dx
|
||||
Compressitems:
|
||||
repne scasb
|
||||
inc dx
|
||||
againcomp:
|
||||
cmp [di],al
|
||||
jne nosup
|
||||
mov si,di
|
||||
mov bx,0
|
||||
push cx
|
||||
mov cx,1
|
||||
call delete0
|
||||
pop cx
|
||||
jmp againcomp
|
||||
nosup:
|
||||
cmp cx,0
|
||||
jne compressitems
|
||||
mov cx,dx
|
||||
pop es di si dx ax
|
||||
ret
|
||||
|
||||
;Met le nombre d'‚l‚ments … cx
|
||||
Setnbitems0:
|
||||
push ax cx dx di es
|
||||
mov dx,cx
|
||||
call Getnbitems0
|
||||
cmp cx,dx
|
||||
je noadjust
|
||||
ja subsome
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
sub cx,dx
|
||||
neg cx
|
||||
push cx
|
||||
call getlength0
|
||||
add di,cx
|
||||
pop cx
|
||||
mov al,cs:delim
|
||||
mov ah,'a'
|
||||
rep stosw
|
||||
mov al,0
|
||||
stosb
|
||||
jmp noadjust
|
||||
subsome:
|
||||
mov cx,dx
|
||||
call GetPointeritem0
|
||||
dec di
|
||||
mov byte ptr [di],0
|
||||
noadjust:
|
||||
pop es di dx cx
|
||||
ret
|
||||
|
||||
;Renvoie la taille dx de l'‚l‚ment cx
|
||||
Getitemsize:
|
||||
push cx di
|
||||
call getpointeritem0
|
||||
mov dx,di
|
||||
inc cx
|
||||
call getpointeritem0
|
||||
sub dx,di
|
||||
neg dx
|
||||
dec dx
|
||||
pop di cx
|
||||
ret
|
||||
|
||||
;Renvoie en es:di l'‚l‚ment cx de ds:si
|
||||
Getitem0:
|
||||
push si di cx ax
|
||||
push di
|
||||
call getPointeritem0
|
||||
call getitemsize
|
||||
mov si,di
|
||||
pop di
|
||||
mov cx,dx
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop ax cx di si
|
||||
ret
|
||||
|
||||
;renvoi un pointeur di sur l'‚l‚ment cx de ds:si
|
||||
GetPointeritem0:
|
||||
push ax bx cx dx es
|
||||
mov bx,cx
|
||||
call Getlength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,cs:delim
|
||||
xor dx,dx
|
||||
Countnbitems:
|
||||
cmp bx,dx
|
||||
je finishpointer
|
||||
repne scasb
|
||||
inc dx
|
||||
cmp cx,0
|
||||
jne countnbitems
|
||||
inc di
|
||||
finishpointer:
|
||||
pop es dx cx bx ax
|
||||
ret
|
||||
|
||||
;Renvoie le nombre d'‚l‚ments cx de ds:si
|
||||
GetNbitems0:
|
||||
push ax dx di es
|
||||
call Getlength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,cs:delim
|
||||
xor dx,dx
|
||||
Countitems:
|
||||
repne scasb
|
||||
inc dx
|
||||
cmp cx,0
|
||||
jne countitems
|
||||
mov cx,dx
|
||||
pop es di dx ax
|
||||
ret
|
||||
|
||||
;renvoie la taille en octets CX de la chaine point‚e en ds:si
|
||||
GetLength0:
|
||||
push ax di es
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,0
|
||||
mov cx,0FFFFh
|
||||
cld
|
||||
repne scasb
|
||||
neg cx
|
||||
dec cx
|
||||
dec cx
|
||||
pop es di ax
|
||||
ret
|
||||
|
||||
;Met la taille en octets de la chaine point‚e ds:si a CX
|
||||
SetLength0:
|
||||
push bx
|
||||
mov bx,cx
|
||||
mov byte ptr [si+bx],0
|
||||
pop bx
|
||||
ret
|
||||
|
||||
;met en majuscule la chaine ds:si
|
||||
UpperCase0:
|
||||
push si ax
|
||||
UpperCase:
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je EndUpperCase
|
||||
cmp al,'a'
|
||||
jb UpperCase
|
||||
cmp al,'z'
|
||||
ja UpperCase
|
||||
sub byte ptr [si-1],'a'-'A'
|
||||
jmp UpperCase
|
||||
EndUpperCase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
;met en majuscule la premiŠre lettre chaine ds:si
|
||||
OneCase0:
|
||||
push ax
|
||||
OneUpperCase:
|
||||
mov al,ds:[si]
|
||||
cmp al,'a'
|
||||
jb OneEndUpperCase
|
||||
cmp al,'z'
|
||||
ja OneEndUpperCase
|
||||
sub byte ptr [si],'a'-'A'
|
||||
OneEndUpperCase:
|
||||
clc
|
||||
pop ax
|
||||
ret
|
||||
|
||||
;met en minuscule la chaine ds:si
|
||||
LowerCase0:
|
||||
push si ax
|
||||
LowerCase:
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je EndLowerCase
|
||||
cmp al,'A'
|
||||
jb LowerCase
|
||||
cmp al,'Z'
|
||||
ja LowerCase
|
||||
add byte ptr [si-1],'a'-'A'
|
||||
jmp LowerCase
|
||||
EndLowerCase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
;Inverse la casse la chaine ds:si
|
||||
InvertCase0:
|
||||
push si ax
|
||||
InvertCase:
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je EndInvertCase
|
||||
cmp al,'A'
|
||||
jb InvertCase
|
||||
cmp al,'Z'
|
||||
jbe GoInvertCase
|
||||
cmp al,'a'
|
||||
jb InvertCase
|
||||
cmp al,'z'
|
||||
ja InvertCase
|
||||
sub byte ptr [si-1],'a'-'A'
|
||||
jmp InvertCase
|
||||
GoInvertCase:
|
||||
add byte ptr [si-1],'a'-'A'
|
||||
jmp InvertCase
|
||||
EndInvertCase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
start:
|
||||
mov si,offset essai
|
||||
call whatis0
|
||||
|
||||
|
||||
mov si,offset pop1
|
||||
mov di,offset pop2
|
||||
call checksyntax0
|
||||
ret
|
||||
|
||||
essai db '#',0
|
||||
pop1 db 'essai 0FFh',0
|
||||
pop2 db 'ESSAI 012H',0
|
||||
include str0.asm
|
||||
|
||||
|
||||
|
||||
end start
|
|
@ -1,14 +1,27 @@
|
|||
[bits 16] ;16 bits
|
||||
[org 0x0100] ;Point d'entré en 0100h
|
||||
[org 0x0] ;Point d'entré en 0h
|
||||
section .text ;Segment de code
|
||||
|
||||
start:
|
||||
mov ah,0x0D
|
||||
mov si,msg
|
||||
int 0x47 ;Afficher le texte (Showstring0)
|
||||
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 imported ;exportation de fonctions
|
||||
sections dw 0 ;sections des blocs mémoire
|
||||
starting dw realstart
|
||||
|
||||
imported:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
endofimport dd 0
|
||||
|
||||
realstart:
|
||||
push msg
|
||||
call far [cs:print] ;Afficher le texte (Showstring0)
|
||||
xor ax,ax
|
||||
int 0x16 ;Attendre l'appuie sur une touche
|
||||
retf ;retour far
|
||||
|
||||
msg db 'Hello World',0
|
||||
msg db 'Hello World !!',0
|
||||
|
||||
|
|
|
@ -3,17 +3,29 @@
|
|||
Smart ;Optimisations
|
||||
.code ;Segment de code
|
||||
|
||||
org 0100h ;Point d'entré en 0100h
|
||||
org 0h ;Point d'entré en 0h
|
||||
|
||||
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 imported ;exportation de fonctions
|
||||
sections dw 0 ;sections des blocs mémoire
|
||||
starting dw realstart
|
||||
|
||||
imported:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
|
||||
start:
|
||||
mov ah,0Dh
|
||||
mov si,offset msg
|
||||
int 47h ;Afficher le texte (Showstring0)
|
||||
push msg
|
||||
call far [cs:print] ;Afficher le texte (Showstring0)
|
||||
xor ax,ax
|
||||
int 16h ;Attendre l'appuie sur une touche
|
||||
db 0CBH ;retour far
|
||||
|
||||
msg db 'Hello World',0
|
||||
msg db 'Hello World !!',0
|
||||
|
||||
end start
|
||||
|
||||
|
|
BIN
doc_origine.pdf
|
@ -1,40 +1,40 @@
|
|||
BMP_File struc
|
||||
BMP_FileType db 'BM'
|
||||
BMP_FileSize dd ? ; taille du fichier
|
||||
BMP_Reserved dd 0 ; toujours 0
|
||||
BMP_BitMapOffset dd ? ; offset de l'image
|
||||
BMP_HeaderSize dd ? ; taille de l'entete en octects
|
||||
BMP_Width dd ? ; largeur en pixels de l'image
|
||||
BMP_Height dd ? ; hauteur en pixels de l'image
|
||||
BMP_Planes dw 1 ; nombre de plan utilisés
|
||||
BMP_BitsPerPixel dw ? ; nombre de bits par pixels
|
||||
BMP_Compression dd ? ; méthode de compression
|
||||
BMP_SizeOfBitMap dd ? ; taille de l'image en octects
|
||||
BMP_HorzResolution dd ? ; resolution horizontale en pixels par mètre
|
||||
BMP_VertResolution dd ? ; resolution verticale en pixels par mètre
|
||||
BMP_ColorsUsed dd ? ; nombre de couleur dans la palette si 0: palette entière si BitPerPixel<=8
|
||||
BMP_ColorsImportant dd ? ; nombre de couleurs importantes masques pour les modes de plus de 8 bits par pixels
|
||||
BMP_RedMask dd ?
|
||||
BMP_GreenMask dd ?
|
||||
BMP_BlueMask dd ?
|
||||
BMP_AlphaMask dd ?
|
||||
BMP_ColorSpaceType dd ?
|
||||
BMP_RedX dd ?
|
||||
BMP_RedY dd ?
|
||||
BMP_RedZ dd ?
|
||||
BMP_GreenX dd ?
|
||||
BMP_GreenY dd ?
|
||||
BMP_GreenZ dd ?
|
||||
BMP_BlueX dd ?
|
||||
BMP_BlueY dd ?
|
||||
BMP_BlueZ dd ?
|
||||
BMP_GammaRed dd ?
|
||||
BMP_GammaGreen dd ?
|
||||
BMP_GammeBlue dd ?
|
||||
BMP_file ends
|
||||
struc bmp_file
|
||||
bmp_filetype db 'bm'
|
||||
bmp_filesize dd ? ; taille du fichier
|
||||
bmp_reserved dd 0 ; toujours 0
|
||||
bmp_bitmapoffset dd ? ; offset de l'image
|
||||
bmp_headersize dd ? ; taille de l'entete en octects
|
||||
bmp_width dd ? ; largeur en pixels de l'image
|
||||
bmp_height dd ? ; hauteur en pixels de l'image
|
||||
bmp_planes dw 1 ; nombre de plan utilisés
|
||||
bmp_bitsperpixel dw ? ; nombre de bits par pixels
|
||||
bmp_compression dd ? ; méthode de compression
|
||||
bmp_sizeofbitmap dd ? ; taille de l'image en octects
|
||||
bmp_horzresolution dd ? ; resolution horizontale en pixels par mètre
|
||||
bmp_vertresolution dd ? ; resolution verticale en pixels par mètre
|
||||
bmp_colorsused dd ? ; nombre de couleur dans la palette si 0: palette entière si bitperpixel<=8
|
||||
bmp_colorsimportant dd ? ; nombre de couleurs importantes masques pour les modes de plus de 8 bits par pixels
|
||||
bmp_redmask dd ?
|
||||
bmp_greenmask dd ?
|
||||
bmp_bluemask dd ?
|
||||
bmp_alphamask dd ?
|
||||
bmp_colorspacetype dd ?
|
||||
bmp_redx dd ?
|
||||
bmp_redy dd ?
|
||||
bmp_redz dd ?
|
||||
bmp_greenx dd ?
|
||||
bmp_greeny dd ?
|
||||
bmp_greenz dd ?
|
||||
bmp_bluex dd ?
|
||||
bmp_bluey dd ?
|
||||
bmp_bluez dd ?
|
||||
bmp_gammared dd ?
|
||||
bmp_gammagreen dd ?
|
||||
bmp_gammeblue dd ?
|
||||
ends bmp_file
|
||||
|
||||
;BMP_Compression peut prendre les valeurs suivantes:
|
||||
BMP_COMP_UNCOMP equ 0 ; pas de compression
|
||||
BMP_COMP_RLE8 equ 1 ; 8-bit run length encoding
|
||||
BMP_COMP_RLE4 equ 2 ; 4-bit tun length encoding
|
||||
BMP_COMP_BFE equ 3 ; bitfields encoding
|
||||
;bmp_compression peut prendre les valeurs suivantes:
|
||||
bmp_comp_uncomp equ 0 ; pas de compression
|
||||
bmp_comp_rle8 equ 1 ; 8-bit run length encoding
|
||||
bmp_comp_rle4 equ 2 ; 4-bit tun length encoding
|
||||
bmp_comp_bfe equ 3 ; bitfields encoding
|
||||
|
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
@ -28,6 +28,15 @@ filegroup dw 0
|
|||
filesize dd 0
|
||||
ends entries
|
||||
|
||||
;Pour recherches
|
||||
struct find
|
||||
files db 13 dup (0) ;le fichier
|
||||
entryplace dw 0 ;En octet
|
||||
adressdirectory dw 0 ;En cluster
|
||||
firstsearch db 1 ;Premiere requete ?
|
||||
result entries <>
|
||||
ends find
|
||||
|
||||
struc bootinfo
|
||||
vendor db 'COS2000A' ;Fabricant + n°série Formatage
|
||||
sectorsize dw 512 ;octet/secteur
|
||||
|
|
|
@ -2,3 +2,25 @@ struc point
|
|||
coordx db 0
|
||||
coordy db 0
|
||||
ends point
|
||||
|
||||
struc vgainf
|
||||
lines db 0
|
||||
columns db 0
|
||||
x db 0
|
||||
y db 0
|
||||
xy dw 0
|
||||
colors db 7
|
||||
mode db 0FFh
|
||||
pagesize dw 0
|
||||
style db 0
|
||||
font db 0
|
||||
graphic db 0
|
||||
nbpage db 0
|
||||
color db 0
|
||||
cursor db 0
|
||||
segments dw 0
|
||||
linesize dw 0
|
||||
adress dw 0
|
||||
base dw 0
|
||||
scrolling db 1
|
||||
ends vgainf
|
||||
|
|
|
@ -1,3 +1,50 @@
|
|||
struc regs
|
||||
seip dd 0
|
||||
seax dd 0
|
||||
sebx dd 0
|
||||
secx dd 0
|
||||
sedx dd 0
|
||||
sesi dd 0
|
||||
sedi dd 0
|
||||
sebp dd 0
|
||||
sesp dd 0
|
||||
scs dw 0
|
||||
sds dw 0
|
||||
ses dw 0
|
||||
sfs dw 0
|
||||
sgs dw 0
|
||||
sss dw 0
|
||||
seflags dd 0
|
||||
ends regs
|
||||
|
||||
struc tuple ;vecteur d'interruption
|
||||
off dw 0 ;adresse
|
||||
seg dw 0 ;segment
|
||||
ends tuple
|
||||
|
||||
union vector
|
||||
data tuple <>
|
||||
content dd 0
|
||||
ends
|
||||
|
||||
struc ints ;bloc interruption
|
||||
number db 0 ;numero de l'interruption
|
||||
activated db 0 ;activé ou non
|
||||
locked db 0 ;verrouillée
|
||||
launchedlow dd 0
|
||||
launchedhigh dd 0
|
||||
calledlow dd 0
|
||||
calledhigh dd 0
|
||||
vector1 vector ?
|
||||
vector2 vector ?
|
||||
vector3 vector ?
|
||||
vector4 vector ?
|
||||
vector5 vector ?
|
||||
vector6 vector ?
|
||||
vector7 vector ?
|
||||
vector8 vector ?
|
||||
ends ints
|
||||
|
||||
struc mb ;Bloc de mémoire
|
||||
check db "NH" ;signature du bloc de mémoire
|
||||
isnotlast db 0 ;flag indiquant le dernier bloc
|
||||
|
@ -29,4 +76,49 @@ ends descriptor
|
|||
|
||||
|
||||
free equ 0 ;Reference quand libre
|
||||
memorystart equ 0052h ;premier bloc de la mémoire
|
||||
|
||||
|
||||
|
||||
macro exporting
|
||||
label exports
|
||||
endm
|
||||
|
||||
macro importing
|
||||
label imports
|
||||
endm
|
||||
|
||||
macro noimporting
|
||||
label imports
|
||||
dd 0
|
||||
endm
|
||||
|
||||
macro noexporting
|
||||
label imports
|
||||
dd 0
|
||||
endm
|
||||
|
||||
macro ende
|
||||
dd 0
|
||||
endm
|
||||
|
||||
macro endi
|
||||
dd 0
|
||||
endm
|
||||
|
||||
macro use lib:req,fonction:req
|
||||
db "&lib&::&fonction&",0
|
||||
label &fonction& dword
|
||||
dd 0
|
||||
endm
|
||||
|
||||
macro declare fonction:req
|
||||
db "&fonction&",0
|
||||
dw offset fonction
|
||||
endm
|
||||
|
||||
macro heading versmaj:req,versmin:req,start:req
|
||||
header exe <"CE",offset &versmaj&,offset &versmin&,0,offset exports,offset imports,0,offset &start&>
|
||||
db "&fonction&",0
|
||||
dw offset fonction
|
||||
endif
|
||||
endm
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
asm= lzasm
|
||||
asm= lzasm /z/t
|
||||
lnk= elink
|
||||
|
||||
all: setup.com
|
||||
|
||||
setup.com: setup.obj
|
||||
$(lnk) setup.obj setup.com
|
||||
$(lnk) setup.obj setup.com /c
|
||||
|
||||
setup.obj:
|
||||
$(asm) setup.asm
|
||||
|
|
|
@ -11,7 +11,7 @@ ent equ 32h
|
|||
|
||||
jmp copycos
|
||||
|
||||
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,'$'
|
||||
message db 0Dh,0Ah,'COS 2000 V1.3.2BetaFr 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,'$'
|
||||
|
|
20
lib/MAKEFILE
|
@ -1,23 +1,17 @@
|
|||
asm= lzasm
|
||||
asm= lzasm /z/t
|
||||
lnk= elink
|
||||
|
||||
all: detect.lib video.lib
|
||||
all: detect.lib video.lib str0.lib bmp.lib
|
||||
|
||||
detect.lib: detect.obj
|
||||
$(lnk) detect.obj detect.lib
|
||||
.asm.obj:
|
||||
$(asm) $<
|
||||
|
||||
video.lib: video.obj
|
||||
$(lnk) video.obj video.lib
|
||||
|
||||
detect.obj:
|
||||
$(asm) detect.asm
|
||||
|
||||
video.obj:
|
||||
$(asm) video.asm
|
||||
.obj.lib:
|
||||
$(lnk) $< $*.lib
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.ce
|
||||
del *.bak
|
||||
del *.lib
|
||||
del *.com
|
||||
|
|
107
lib/bmp.asm
|
@ -1,77 +1,72 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
.code
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
include "..\include\bmp.h"
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
include ..\include\bmp.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,,offset exports,>
|
||||
header exe <"CE",1,0,0,offset exports,offset imports,,>
|
||||
|
||||
exports:
|
||||
db "showbmp",0
|
||||
dw showbmp
|
||||
db "loadbmppalet",0
|
||||
dw loadbmppalet
|
||||
dw 0
|
||||
exporting
|
||||
declare showbmp
|
||||
declare loadbmppalet
|
||||
ende
|
||||
|
||||
importing
|
||||
use VIDEO,showpixel
|
||||
endi
|
||||
|
||||
;==========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"
|
||||
PROC showbmp FAR
|
||||
ARG @pointer:word, @x:word, @y:word
|
||||
USES ax,bx,cx,dx,si,di
|
||||
mov si,[@pointer]
|
||||
cmp [word ptr (bmp_file si).bmp_filetype],"MB"
|
||||
jne @@errorshowing
|
||||
mov edi,[si+BMP_BitMapOffset]
|
||||
mov edi,[(bmp_file si).bmp_bitmapoffset]
|
||||
add di,400h
|
||||
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
|
||||
mov ecx,[(bmp_file si).bmp_height]
|
||||
mov edx,[(bmp_file si).bmp_width]
|
||||
;and dx,11111100b
|
||||
cmp edx,[(bmp_file si).bmp_width]
|
||||
;jae @@noadjust
|
||||
;add dx,4
|
||||
@@noadjust:
|
||||
sub dx,[si+offset BMP_File.BMP_width]
|
||||
sub edx,[(bmp_file si).bmp_width]
|
||||
@@bouclette:
|
||||
mov al,[di]
|
||||
push bx cx
|
||||
add bx,[x]
|
||||
add cx,[y]
|
||||
int 47h
|
||||
add bx,[@x]
|
||||
add cx,[@y]
|
||||
call [cs:showpixel],bx,cx,[word ptr di]
|
||||
pop cx bx
|
||||
inc bx
|
||||
inc di
|
||||
cmp ebx,[si+offset BMP_File.BMP_width]
|
||||
cmp ebx,[(bmp_file si).bmp_width]
|
||||
jb @@bouclette
|
||||
xor bx,bx
|
||||
add di,dx
|
||||
;add di,dx
|
||||
dec cx
|
||||
cmp cx,0
|
||||
jne @@bouclette
|
||||
clc
|
||||
pop di si dx cx bx ax
|
||||
pop bp
|
||||
retf taille
|
||||
|
||||
ret
|
||||
@@errorshowing:
|
||||
stc
|
||||
pop di si cx bx ax
|
||||
pop bp
|
||||
retf taille
|
||||
|
||||
showbmp ENDP
|
||||
ret
|
||||
ENDP showbmp
|
||||
|
||||
|
||||
;==========LOADBMPPALET=========
|
||||
|
@ -79,16 +74,14 @@ showbmp ENDP
|
|||
;-> DS:%0 BMP
|
||||
;<-
|
||||
;===============================
|
||||
loadbmppalet PROC FAR
|
||||
ARG pointer:word=taille
|
||||
push bp
|
||||
mov bp,sp
|
||||
push ax bx cx dx si
|
||||
mov si,[pointer]
|
||||
PROC loadbmppalet FAR
|
||||
ARG @pointer:word
|
||||
USES ax,bx,cx,dx,si
|
||||
mov si,[@pointer]
|
||||
mov bx,0400h+36h-4
|
||||
mov cx,100h
|
||||
mov dx, 3c8h
|
||||
paletteload:
|
||||
@@paletteload:
|
||||
mov al, cl
|
||||
dec al
|
||||
out dx, al
|
||||
|
@ -105,10 +98,8 @@ paletteload:
|
|||
sub bx,4
|
||||
dec dx
|
||||
dec cl
|
||||
jnz paletteload
|
||||
pop si dx cx bx ax
|
||||
pop bp
|
||||
retf taille
|
||||
loadbmppalet ENDP
|
||||
jnz @@paletteload
|
||||
ret
|
||||
ENDP loadbmppalet
|
||||
|
||||
|
||||
end start
|
||||
|
|
|
@ -13,28 +13,18 @@ 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
|
||||
exporting
|
||||
declare cpuinfo
|
||||
declare setinfo
|
||||
declare pciinfo
|
||||
declare getpciclass
|
||||
declare getpcisubclass
|
||||
declare getcardinfo
|
||||
declare pcireadbyte
|
||||
declare pcireadword
|
||||
declare pcireaddword
|
||||
declare detectvmware
|
||||
ende
|
||||
|
||||
PROC detectvmware FAR
|
||||
USES eax,ebx,ecx,edx
|
||||
|
@ -317,6 +307,7 @@ subclass170 db 'dpio',0
|
|||
PROC getcardinfo FAR
|
||||
ARG @bus:word,@device:word,@function:word,@pointer:word
|
||||
USES eax,bx,di
|
||||
mov di,[@pointer]
|
||||
cmp [@function],0
|
||||
je @@amultiorfirst
|
||||
call pcireadbyte,[@bus],[@device],0,offset (pcidata).typed
|
||||
|
@ -327,7 +318,6 @@ PROC getcardinfo FAR
|
|||
jmp @@notexist
|
||||
@@amultiorfirst:
|
||||
xor bx,bx
|
||||
mov di,[@pointer]
|
||||
@@goinfos:
|
||||
call pcireadword,[@bus],[@device],[@function],bx
|
||||
inc bl
|
||||
|
@ -351,7 +341,7 @@ PROC getcardinfo FAR
|
|||
ret
|
||||
endp getcardinfo
|
||||
|
||||
;lit un octet du bus %0 device %1 function %2 n° %3 et le met en AL
|
||||
;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
|
||||
|
@ -373,7 +363,7 @@ PROC pcireadbyte FAR
|
|||
ret
|
||||
endp pcireadbyte
|
||||
|
||||
;lit 2 octet du bus %0 device %1 function %2 n° %3 et le met en AX
|
||||
;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
|
||||
|
@ -395,7 +385,7 @@ PROC pcireadword FAR
|
|||
ret
|
||||
endp pcireadword
|
||||
|
||||
;lit 4 octet du bus %0 device %1 function %2 n° %3 et le met en EAX
|
||||
;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
|
||||
|
|
|
@ -0,0 +1,993 @@
|
|||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
header exe <"CE",1,0,0,offset exports,,,>
|
||||
|
||||
|
||||
exporting
|
||||
declare checksyntax
|
||||
declare cmpitems
|
||||
declare gettypeditem
|
||||
declare gettyped
|
||||
declare whatisitem
|
||||
declare whatis
|
||||
declare strtoadress
|
||||
declare strisadress
|
||||
declare strisname
|
||||
declare strisbase
|
||||
declare strtoint
|
||||
declare left
|
||||
declare right
|
||||
declare middle
|
||||
declare fill
|
||||
declare replaceallchar
|
||||
declare searchchar
|
||||
declare invert
|
||||
declare cmpstr
|
||||
declare evalue
|
||||
declare insert
|
||||
declare delete
|
||||
declare copy
|
||||
declare concat
|
||||
declare compressdelimiter
|
||||
declare setnbitems
|
||||
declare getitemsize
|
||||
declare getitem
|
||||
declare getpointeritem
|
||||
declare getnbitems
|
||||
declare getlength
|
||||
declare setlength
|
||||
declare uppercase
|
||||
declare onecase
|
||||
declare lowercase
|
||||
declare invertcase
|
||||
ende
|
||||
|
||||
;Librairie qui prend en charge le format de STR ASCIIZ
|
||||
;# nombre 8
|
||||
;? str 7
|
||||
;& nom 6
|
||||
|
||||
;High Low
|
||||
;0 variable 4 hex
|
||||
;1 byte 3 dec
|
||||
;2 word 2 oct
|
||||
;3 3 octets 1 bin
|
||||
;4 dword 5 adresse
|
||||
;5 5 octets 6 nom
|
||||
;6 ... 7 str
|
||||
; 8 nombre
|
||||
|
||||
;Renvoie carry si la syntaxe de ds:si n'est pas respect‚ par rapport a es:di
|
||||
PROC checksyntax FAR
|
||||
ARG @src:word,@dest:word,@delim:word
|
||||
USES ax,bx,cx,dx,si,di,ds,es
|
||||
LOCAL @@temp:word:256
|
||||
push ss
|
||||
pop es
|
||||
lea si,[@@temp]
|
||||
mov di,[@dest]
|
||||
call copy,[@src],si
|
||||
call xch
|
||||
call compressdelimiter,si,[@delim]
|
||||
call getnbitems,si,[@delim]
|
||||
mov bx,ax
|
||||
call xch
|
||||
call getnbitems,di,[@delim]
|
||||
cmp bx,ax
|
||||
jne @@notequalatall
|
||||
xor cx,cx
|
||||
@@itemer:
|
||||
call xch
|
||||
call whatisitem,si,cx,[@delim]
|
||||
mov dx,ax
|
||||
call xch
|
||||
call whatisitem,di,cx,[@delim]
|
||||
cmp ax,dx
|
||||
jne @@prob
|
||||
cmp al,6
|
||||
jb @@equal
|
||||
call cmpitems
|
||||
je @@equal
|
||||
@@prob:
|
||||
cmp dl,4
|
||||
ja @@nonumber
|
||||
cmp dl,8
|
||||
je @@equal
|
||||
;cmp al,4
|
||||
;jne @@notequalatall
|
||||
cmp dh,ah
|
||||
ja @@notequalatall
|
||||
jmp @@equal
|
||||
@@nonumber:
|
||||
cmp al,7
|
||||
jne @@nostr
|
||||
cmp ah,0
|
||||
jne @@notequalatall
|
||||
jmp @@equal
|
||||
@@nostr:
|
||||
cmp al,6
|
||||
jne @@noname
|
||||
cmp dl,6
|
||||
jne @@noname
|
||||
cmp ah,0
|
||||
jne @@notequalatall
|
||||
jmp @@equal
|
||||
@@noname:
|
||||
cmp al,8
|
||||
je @@equal
|
||||
jmp @@notequalatall
|
||||
@@equal:
|
||||
inc cx
|
||||
cmp cx,bx
|
||||
jne @@itemer
|
||||
cld
|
||||
@@ackno:
|
||||
ret
|
||||
@@notequalatall:
|
||||
stc
|
||||
jmp @@ackno
|
||||
endp checksyntax
|
||||
|
||||
xch:
|
||||
push es
|
||||
push ds
|
||||
pop es
|
||||
pop ds
|
||||
ret
|
||||
|
||||
|
||||
;Compare les ‚l‚ments cx de deux chaine ds:si et es:di
|
||||
PROC cmpitems FAR
|
||||
ARG @src:word,@dest:word,@item:word,@delim:word
|
||||
USES ax,cx,si,di,es
|
||||
push ds
|
||||
pop es
|
||||
call getpointeritem,[@src],[@item],[@delim]
|
||||
mov si,ax
|
||||
call getitemsize,[@src],[@item],[@delim]
|
||||
mov di,[@dest]
|
||||
mov cx,ax
|
||||
cld
|
||||
rep cmpsb
|
||||
clc
|
||||
ret
|
||||
endp cmpitems
|
||||
|
||||
|
||||
;Renvoie l'‚l‚ment cx de ds:si dans edx si nb et dans es:di si str ou name
|
||||
PROC gettypeditem FAR
|
||||
ARG @src:word,@item:word,@delim:word
|
||||
USES bx,cx,si,di
|
||||
mov si,[@src]
|
||||
mov cx,[@item]
|
||||
call getpointeritem,si,cx,[@delim]
|
||||
mov di,ax
|
||||
inc cx
|
||||
call getpointeritem,si,cx,[@delim]
|
||||
mov si,ax
|
||||
dec si
|
||||
mov cl,0
|
||||
xchg cl,[ds:si]
|
||||
call gettyped,di
|
||||
xchg cl,[ds:si]
|
||||
clc
|
||||
ret
|
||||
endp gettypeditem
|
||||
|
||||
|
||||
;Renvoie eax si nb et dans ds:eax si str ou name
|
||||
PROC gettyped FAR
|
||||
ARG @src:word
|
||||
USES si
|
||||
mov si,[@src]
|
||||
xor eax,eax
|
||||
call whatis,si
|
||||
cmp al,1
|
||||
je @@bin
|
||||
cmp al,2
|
||||
je @@oct
|
||||
cmp al,3
|
||||
je @@dec
|
||||
cmp al,4
|
||||
je @@hex
|
||||
cmp al,5
|
||||
je @@pointer
|
||||
mov ax,si
|
||||
jmp @@endofgettypeditem
|
||||
@@bin:
|
||||
call strtoint,si,2
|
||||
jmp @@endofgettypeditem
|
||||
@@oct:
|
||||
call strtoint,si,8
|
||||
jmp @@endofgettypeditem
|
||||
@@dec:
|
||||
call strtoint,si,10
|
||||
jmp @@endofgettypeditem
|
||||
@@hex:
|
||||
call strtoint,si,16
|
||||
jmp @@endofgettypeditem
|
||||
@@pointer:
|
||||
call strtoadress,si
|
||||
@@endofgettypeditem:
|
||||
clc
|
||||
ret
|
||||
endp gettyped
|
||||
|
||||
;Renvoie dans ax le type de la str0 point‚e par ds:%0 ‚l‚ment %1 delim %3
|
||||
PROC whatisitem FAR
|
||||
ARG @src:word,@item:word,@delim:word
|
||||
USES bx,cx,si,di
|
||||
mov si,[@src]
|
||||
mov cx,[@item]
|
||||
call getpointeritem,si,cx,[@delim]
|
||||
mov di,ax
|
||||
inc cx
|
||||
call getpointeritem,si,cx,[@delim]
|
||||
mov si,ax
|
||||
dec si
|
||||
mov cl,0
|
||||
xchg cl,[ds:si]
|
||||
call whatis,di
|
||||
xchg cl,[ds:si]
|
||||
clc
|
||||
ret
|
||||
endp whatisitem
|
||||
|
||||
;Renvoie dans ax le type de la str0 point‚e par ds:%0
|
||||
;High Low
|
||||
;0 variable 4 hex
|
||||
;1 byte 3 dec
|
||||
;2 word 2 oct
|
||||
;3 3 octets 1 bin
|
||||
;4 dword 5 adresse
|
||||
;5 5 octets 6 name
|
||||
;6 ... 7 str
|
||||
PROC whatis FAR
|
||||
ARG @src:word
|
||||
USES bx,cx,edx,si
|
||||
mov si,[@src]
|
||||
xor cx,cx
|
||||
mov cl,2
|
||||
call strisbase,si,cx
|
||||
jnc @@finbase
|
||||
mov cl,8
|
||||
call strisbase,si,cx
|
||||
jnc @@finbase
|
||||
mov cl,10
|
||||
call strisbase,si,cx
|
||||
jnc @@finbase
|
||||
mov cl,16
|
||||
call strisbase,si,cx
|
||||
jc @@testadress
|
||||
@@finbase:
|
||||
mov bx,cx
|
||||
xor ch,ch
|
||||
mov al,[cs:bx+offset basenn-2]
|
||||
push eax
|
||||
call strtoint,si,cx
|
||||
mov edx,eax
|
||||
pop eax
|
||||
cmp edx,0000FFFFh
|
||||
ja @@bits32
|
||||
cmp dx,00FFh
|
||||
ja @@bits16
|
||||
mov ah,1
|
||||
jmp @@endofwhat
|
||||
@@bits16:
|
||||
mov ah,2
|
||||
jmp @@endofwhat
|
||||
@@bits32:
|
||||
mov ah,4
|
||||
jmp @@endofwhat
|
||||
@@testadress:
|
||||
call strisadress,si
|
||||
jc @@testname
|
||||
mov ax,0005h
|
||||
jmp @@endofwhat
|
||||
@@testname:
|
||||
call strisname
|
||||
jc @@testnumber
|
||||
xor ah,ah
|
||||
cmp [byte ptr si],'&'
|
||||
je @@okname
|
||||
call getlength,si
|
||||
mov ah,al
|
||||
@@okname:
|
||||
mov al,06h
|
||||
jmp @@endofwhat
|
||||
@@testnumber:
|
||||
cmp [byte ptr si],'#'
|
||||
jne @@testvarstr
|
||||
xor ah,ah
|
||||
mov al,08h
|
||||
jmp @@endofwhat
|
||||
@@testvarstr:
|
||||
xor ah,ah
|
||||
cmp [byte ptr si],'?'
|
||||
je @@okvarstr
|
||||
call getlength,si
|
||||
mov ah,al
|
||||
@@okvarstr:
|
||||
mov al,07h
|
||||
@@endofwhat:
|
||||
clc
|
||||
ret
|
||||
endp whatis
|
||||
|
||||
|
||||
|
||||
;Renvoie non carry si la str ds:si point‚e peut ˆtre une adresse
|
||||
PROC strtoadress FAR
|
||||
;push
|
||||
stc
|
||||
;pop
|
||||
ret
|
||||
endp strtoadress
|
||||
|
||||
|
||||
;Renvoie en es:di le pointeur str0 ds:si
|
||||
PROC strisadress FAR
|
||||
;push
|
||||
stc
|
||||
;pop
|
||||
ret
|
||||
endp strisadress
|
||||
|
||||
;Renvoie non carry si la str ds:%0 point‚e peut ˆtre un nom de fichier
|
||||
PROC strisname FAR
|
||||
ARG @src:word
|
||||
USES ax,si,di
|
||||
mov si,[@src]
|
||||
@@isname:
|
||||
mov al,[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je @@itsok
|
||||
mov di,offset non
|
||||
@@verify:
|
||||
mov ah,[cs:di]
|
||||
inc di
|
||||
cmp ah,0FFh
|
||||
je @@isname
|
||||
cmp ah,al
|
||||
jne @@verify
|
||||
stc
|
||||
jmp @@itsdead
|
||||
@@itsok:
|
||||
clc
|
||||
@@itsdead:
|
||||
ret
|
||||
endp strisname
|
||||
|
||||
non db '/<>|"?*:\',01,0FFh
|
||||
|
||||
;Renvoie non carry si le texte point‚ par %0 est de la base %1
|
||||
PROC strisbase FAR
|
||||
ARG @src:word,@base:word
|
||||
USES ax,cx,si,di,es
|
||||
push cs
|
||||
pop es
|
||||
mov si,[@src]
|
||||
@@isstrbase:
|
||||
mov al,[si]
|
||||
cmp al,0
|
||||
je @@okbase
|
||||
mov cx,[@base]
|
||||
xor ch,ch
|
||||
mov di,cx
|
||||
cmp al,[es:di-2+offset basen]
|
||||
je @@verifbase
|
||||
xor ch,ch
|
||||
inc cl
|
||||
mov di,offset base
|
||||
cld
|
||||
repne scasb
|
||||
cmp cx,0
|
||||
je @@nobase
|
||||
inc si
|
||||
jmp @@isstrbase
|
||||
@@okbase:
|
||||
clc
|
||||
@@endbase:
|
||||
ret
|
||||
@@verifbase:
|
||||
cmp [byte ptr si+1],0
|
||||
je @@okbase
|
||||
@@nobase:
|
||||
stc
|
||||
jmp @@endbase
|
||||
endp strisbase
|
||||
|
||||
base db '0123456789ABCDEF'
|
||||
basen db 'b o d h'
|
||||
basenn db 1,0,0,0,0,0,2,0,3,0,0,0,0,0,4
|
||||
|
||||
|
||||
;Converti un str %0 de base %1 en int dans eax
|
||||
PROC strtoint FAR
|
||||
ARG @src:word,@base:word
|
||||
USES ebx,ecx,edx,si,edi,es
|
||||
push cs
|
||||
pop es
|
||||
mov si,[@src]
|
||||
@@gotos:
|
||||
cmp [byte ptr si+1], 0
|
||||
je @@oklo
|
||||
inc si
|
||||
jmp @@gotos
|
||||
@@oklo:
|
||||
mov edi,1
|
||||
xor ebx,ebx
|
||||
@@baseto:
|
||||
cmp [@src],si
|
||||
ja @@endbaseto
|
||||
mov al,[si]
|
||||
xor ecx,ecx
|
||||
mov cl,[byte ptr @base]
|
||||
inc cl
|
||||
push di
|
||||
mov di,offset base
|
||||
cld
|
||||
repne scasb
|
||||
pop di
|
||||
jne @@noop
|
||||
sub cl,[byte ptr @base]
|
||||
neg cl
|
||||
mov eax,edi
|
||||
mul ecx
|
||||
add ebx,eax
|
||||
mov eax,edi
|
||||
mov cl,[byte ptr @base]
|
||||
mul ecx
|
||||
mov edi,eax
|
||||
@@noop:
|
||||
dec si
|
||||
jmp @@baseto
|
||||
@@endbaseto:
|
||||
mov eax,ebx
|
||||
clc
|
||||
ret
|
||||
endp strtoint
|
||||
|
||||
|
||||
;Renvoie en ds:%1 la partie de %2 caractŠres a partir de la gauche de ds:%0
|
||||
PROC left FAR
|
||||
ARG @src:word,@dest:word,@nb:word
|
||||
USES ax,cx,si,di,es
|
||||
push ds
|
||||
pop es
|
||||
mov si,[@src]
|
||||
mov di,[@dest]
|
||||
mov cx,[@nb]
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
clc
|
||||
ret
|
||||
endp left
|
||||
|
||||
;Renvoie en ds:%1 la partie de %2 caractŠres a partir de la droite de ds:%0
|
||||
PROC right FAR
|
||||
ARG @src:word,@dest:word,@nb:word
|
||||
USES ax,cx,si,di,es
|
||||
push ds
|
||||
pop es
|
||||
mov si,[@src]
|
||||
mov di,[@dest]
|
||||
call getlength,si
|
||||
add si,ax
|
||||
sub si,[@nb]
|
||||
mov cx,[@nb]
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
clc
|
||||
ret
|
||||
endp right
|
||||
|
||||
;Renvoie en ds:%1 la partie de %3 caractŠres a partir de la position %2 de ds:%0
|
||||
PROC middle FAR
|
||||
ARG @src:word,@dest:word,@item:word,@nb:word
|
||||
USES ax,cx,si,di,es
|
||||
push ds
|
||||
pop es
|
||||
mov si,[@src]
|
||||
mov di,[@dest]
|
||||
mov cx,[@nb]
|
||||
add si,[@item]
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
clc
|
||||
ret
|
||||
endp middle
|
||||
|
||||
;Rempli de %3 caractŠres %2 a partir de la position %1 de ds:%0
|
||||
PROC fill FAR
|
||||
ARG @src:word,@item:word,@char:word,@nb:word
|
||||
USES ax,cx,si,di,es
|
||||
push ds
|
||||
pop es
|
||||
mov di,[@src]
|
||||
add di,[@item]
|
||||
mov ax,[@char]
|
||||
mov cx,[@nb]
|
||||
cld
|
||||
rep stosb
|
||||
clc
|
||||
ret
|
||||
endp fill
|
||||
|
||||
;Remplace tout les caractŠres %1 de ds:%0 par des caractŠres %2
|
||||
PROC replaceallchar FAR
|
||||
ARG @src:word,@char1:word,@char2:word
|
||||
USES ax,cx,dx,di,es
|
||||
mov di,[@src]
|
||||
call getlength,di
|
||||
mov cx,ax
|
||||
mov ax,[@char1]
|
||||
mov dx,[@char2]
|
||||
push ds
|
||||
pop es
|
||||
@@findandchange:
|
||||
repne scasb
|
||||
cmp cx,0
|
||||
je @@endofchange
|
||||
mov [es:di-1],dl
|
||||
jmp @@findandchange
|
||||
@@endofchange:
|
||||
clc
|
||||
ret
|
||||
endp replaceallchar
|
||||
|
||||
;Recherche un caractŠre dl dans la chaŒne ds:%0
|
||||
PROC searchchar FAR
|
||||
ARG @src:word,@char:word
|
||||
USES cx,di,es
|
||||
mov di,[@src]
|
||||
call getlength,di
|
||||
mov cx,ax
|
||||
push ds
|
||||
pop es
|
||||
mov ax,[@char]
|
||||
repne scasb
|
||||
mov ax,di
|
||||
dec ax
|
||||
clc
|
||||
ret
|
||||
endp searchchar
|
||||
|
||||
;Inverse la chaine point‚e en ds:%0
|
||||
PROC invert FAR
|
||||
ARG @src:word
|
||||
USES ax,cx,si,di
|
||||
mov si,[@src]
|
||||
call getlength,si
|
||||
mov di,si
|
||||
add di,ax
|
||||
dec di
|
||||
@@revert:
|
||||
mov al,[si]
|
||||
xchg al,[di]
|
||||
mov [si],al
|
||||
inc si
|
||||
dec di
|
||||
cmp si,di
|
||||
ja @@finishinvert
|
||||
dec di
|
||||
cmp si,di
|
||||
ja @@finishinvert
|
||||
inc di
|
||||
jmp @@revert
|
||||
@@finishinvert:
|
||||
clc
|
||||
ret
|
||||
endp invert
|
||||
|
||||
;Compares 2 chaines de caractŠres DS:%0 et DS:%1 zerof si non equal
|
||||
PROC cmpstr FAR
|
||||
ARG @src:word,@dest:word
|
||||
USES cx,dx,si,di
|
||||
push ds
|
||||
pop es
|
||||
mov si,[@src]
|
||||
mov di,[@dest]
|
||||
call getlength,di
|
||||
mov cx,ax
|
||||
call getlength,si
|
||||
cmp cx,ax
|
||||
jne @@notequal
|
||||
repe cmpsb
|
||||
@@notequal:
|
||||
ret
|
||||
endp cmpstr
|
||||
|
||||
;Compares 2 chaines de caractŠres DS:%0 et DS:%1 zerof si non equal et renvoie le nb de caractŠre egaux dans ax
|
||||
PROC evalue FAR
|
||||
ARG @src:word,@dest:word
|
||||
USES cx,si,di,es
|
||||
push ds
|
||||
pop es
|
||||
mov si,[@src]
|
||||
mov di,[@dest]
|
||||
call getlength ,di
|
||||
mov cx,ax
|
||||
repe cmpsb
|
||||
pushf
|
||||
jne @@noident
|
||||
sub ax,cx
|
||||
popf
|
||||
clc
|
||||
ret
|
||||
@@noident:
|
||||
sub ax,cx
|
||||
dec ax
|
||||
popf
|
||||
clc
|
||||
ret
|
||||
endp evalue
|
||||
|
||||
;Insert une chaine ds:%0 en ds:%1 a partir du caractŠre %2
|
||||
PROC insert FAR
|
||||
ARG @src:word,@dest:word,@item:word
|
||||
USES ax,cx,si,di,es
|
||||
push es
|
||||
pop ds
|
||||
mov si,[@dest]
|
||||
call getlength,si
|
||||
mov cx,ax
|
||||
add si,ax
|
||||
mov di,si
|
||||
call getlength,[@src]
|
||||
add di,ax
|
||||
sub cx,[@item]
|
||||
inc cx
|
||||
std
|
||||
rep movsb
|
||||
mov si,[@src]
|
||||
mov di,[@dest]
|
||||
add di,[@item]
|
||||
mov cx,ax
|
||||
cld
|
||||
rep movsb
|
||||
clc
|
||||
ret
|
||||
endp insert
|
||||
|
||||
|
||||
;Detruit %2 caractŠres a partir du caractŠre %1 de DS:%0
|
||||
PROC delete FAR
|
||||
ARG @src:word,@item:word,@size:word
|
||||
USES ax,cx,dx,si,di,es
|
||||
push ds
|
||||
pop es
|
||||
mov si,[@src]
|
||||
call getlength,si
|
||||
mov cx,ax
|
||||
sub cx,[@size]
|
||||
sub cx,[@item]
|
||||
inc cx
|
||||
add si,[@item]
|
||||
mov di,si
|
||||
add si,[@size]
|
||||
cld
|
||||
rep movsb
|
||||
clc
|
||||
ret
|
||||
endp delete
|
||||
|
||||
;Copie une chaine de ds:si en es:di
|
||||
PROC copy FAR
|
||||
ARG @src:word,@dest:word
|
||||
USES ax,cx,si,di
|
||||
mov si,[@src]
|
||||
mov di,[@dest]
|
||||
call getlength,si
|
||||
mov cx,ax
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
clc
|
||||
ret
|
||||
endp copy
|
||||
|
||||
|
||||
;ConcatŠne le chaine ds:si avec ds:di
|
||||
PROC concat FAR
|
||||
ARG @src:word,@dest:word
|
||||
USES ax,cx,si,di,es
|
||||
push ds
|
||||
pop es
|
||||
mov si,[@src]
|
||||
call getlength,si
|
||||
mov cx,ax
|
||||
mov di,[@dest]
|
||||
call getlength,di
|
||||
add di,ax
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
clc
|
||||
ret
|
||||
endp concat
|
||||
|
||||
|
||||
;D‚truit les d‚limiteur qui sont cons‚cutifs dans ds:%0 -> renvoie le nb d'item
|
||||
PROC compressdelimiter FAR
|
||||
ARG @src:word,@delim:word
|
||||
USES cx,dx,si,di,es
|
||||
mov di,[@src]
|
||||
call getlength,di
|
||||
mov cx,ax
|
||||
push ds
|
||||
pop es
|
||||
mov ax,[@delim]
|
||||
xor dx,dx
|
||||
@@compressitems:
|
||||
repne scasb
|
||||
inc dx
|
||||
@@againcomp:
|
||||
cmp [di],al
|
||||
jne @@nosup
|
||||
call delete,di,0,1
|
||||
jmp @@againcomp
|
||||
@@nosup:
|
||||
cmp cx,0
|
||||
jne @@compressitems
|
||||
mov ax,dx
|
||||
clc
|
||||
ret
|
||||
endp compressdelimiter
|
||||
|
||||
;Met le nombre d'‚l‚ments de ds:%0 à %1
|
||||
PROC setnbitems FAR
|
||||
ARG @src:word,@size:word,@delim:word
|
||||
USES ax,cx,di,es
|
||||
mov di,[@src]
|
||||
cmp [@size],0
|
||||
je @@onlyzero
|
||||
call getnbitems,di,[@delim]
|
||||
cmp [@size],ax
|
||||
je @@noadjust
|
||||
jb @@subsome
|
||||
push ds
|
||||
pop es
|
||||
sub ax,[@size]
|
||||
neg ax
|
||||
mov cx,ax
|
||||
call getlength,di
|
||||
add di,ax
|
||||
mov ax,[@delim]
|
||||
mov ah,'a'
|
||||
rep stosw
|
||||
xor al,al
|
||||
stosb
|
||||
jmp @@noadjust
|
||||
@@subsome:
|
||||
call getpointeritem,[@src],[@size],[@delim]
|
||||
dec ax
|
||||
mov di,ax
|
||||
@@onlyzero:
|
||||
mov [byte ptr di],0
|
||||
@@noadjust:
|
||||
clc
|
||||
ret
|
||||
endp setnbitems
|
||||
|
||||
;Renvoie la taille ax de l'‚l‚ment %0
|
||||
PROC getitemsize FAR
|
||||
ARG @src:word,@item:word,@delim:word
|
||||
USES cx,dx
|
||||
mov cx,[@item]
|
||||
call getpointeritem,[@src],cx,[@delim]
|
||||
mov dx,ax
|
||||
inc cx
|
||||
call getpointeritem,[@src],cx,[@delim]
|
||||
sub ax,dx
|
||||
dec ax
|
||||
clc
|
||||
ret
|
||||
endp getitemsize
|
||||
|
||||
;Renvoie en ds:%1 l'‚l‚ment %2 de ds:%0
|
||||
PROC getitem FAR
|
||||
ARG @src:word,@dest:word,@item:word,@delim:word
|
||||
USES ax,cx,si,di,es
|
||||
push ds
|
||||
pop es
|
||||
call getpointeritem,[@src],[@item],[@delim]
|
||||
mov si,ax
|
||||
call getitemsize,[@src],[@item],[@delim]
|
||||
mov di,[@dest]
|
||||
mov cx,ax
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
clc
|
||||
ret
|
||||
endp getitem
|
||||
|
||||
;renvoi un pointeur ax sur l'‚l‚ment %1 de ds:%0
|
||||
PROC getpointeritem FAR
|
||||
ARG @src:word,@item:word,@delim:word
|
||||
USES cx,dx,di,es
|
||||
mov di,[@src]
|
||||
cmp [@item],0
|
||||
je @@finishpointer
|
||||
push ds
|
||||
pop es
|
||||
call getlength,di
|
||||
mov cx,ax
|
||||
push ds
|
||||
pop es
|
||||
mov ax,[@delim]
|
||||
xor dx,dx
|
||||
@@countnbitems:
|
||||
cmp [@item],dx
|
||||
je @@finishpointer
|
||||
cld
|
||||
repne scasb
|
||||
inc dx
|
||||
cmp cx,0
|
||||
jne @@countnbitems
|
||||
inc di
|
||||
@@finishpointer:
|
||||
mov ax,di
|
||||
clc
|
||||
ret
|
||||
endp getpointeritem
|
||||
|
||||
;Renvoie le nombre d'‚l‚ments ax de ds:%0
|
||||
PROC getnbitems FAR
|
||||
ARG @src:word,@delim:word
|
||||
USES cx,dx,di,es
|
||||
mov di,[@src]
|
||||
call getlength,di
|
||||
mov cx,ax
|
||||
push ds
|
||||
pop es
|
||||
mov ax,[@delim]
|
||||
xor dx,dx
|
||||
cld
|
||||
@@countitems:
|
||||
repne scasb
|
||||
inc dx
|
||||
cmp cx,0
|
||||
jne @@countitems
|
||||
mov ax,dx
|
||||
clc
|
||||
ret
|
||||
endp getnbitems
|
||||
|
||||
;renvoie la taille en octets AX de la chaine point‚e en ds:%0
|
||||
PROC getlength FAR
|
||||
ARG @src:word
|
||||
USES cx,di,es
|
||||
push ds
|
||||
pop es
|
||||
mov di,[@src]
|
||||
mov al,0
|
||||
mov cx,0FFFFh
|
||||
cld
|
||||
repne scasb
|
||||
neg cx
|
||||
dec cx
|
||||
dec cx
|
||||
mov ax,cx
|
||||
clc
|
||||
ret
|
||||
endp getlength
|
||||
|
||||
;Met la taille en octets de la chaine point‚e ds:%0 a %1
|
||||
PROC setlength FAR
|
||||
ARG @src:word,@size:word
|
||||
USES si
|
||||
mov si,[@src]
|
||||
add si,[@size]
|
||||
mov [byte ptr si],0
|
||||
clc
|
||||
ret
|
||||
endp setlength
|
||||
|
||||
;met en majuscule la chaine ds:%0
|
||||
PROC uppercase FAR
|
||||
ARG @src:word
|
||||
USES si,ax
|
||||
mov si,[@src]
|
||||
@@uppercase:
|
||||
mov al,[ds:si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je @@enduppercase
|
||||
cmp al,'a'
|
||||
jb @@uppercase
|
||||
cmp al,'z'
|
||||
ja @@uppercase
|
||||
sub [byte ptr si-1],'a'-'A'
|
||||
jmp @@uppercase
|
||||
@@enduppercase:
|
||||
clc
|
||||
ret
|
||||
endp uppercase
|
||||
|
||||
;met en majuscule la premiŠre lettre chaine ds:%0
|
||||
PROC onecase FAR
|
||||
ARG @src:word
|
||||
USES ax
|
||||
mov si,[@src]
|
||||
mov al,[ds:si]
|
||||
cmp al,'a'
|
||||
jb @@oneenduppercase
|
||||
cmp al,'z'
|
||||
ja @@oneenduppercase
|
||||
sub [byte ptr si],'a'-'A'
|
||||
@@oneenduppercase:
|
||||
clc
|
||||
ret
|
||||
endp onecase
|
||||
|
||||
;met en minuscule la chaine ds:%0
|
||||
PROC lowercase FAR
|
||||
ARG @src:word
|
||||
USES si,ax
|
||||
mov si,[@src]
|
||||
@@lowercase:
|
||||
mov al,[ds:si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je @@endlowercase
|
||||
cmp al,'A'
|
||||
jb @@lowercase
|
||||
cmp al,'Z'
|
||||
ja @@lowercase
|
||||
add [byte ptr si-1],'a'-'A'
|
||||
jmp @@lowercase
|
||||
@@endlowercase:
|
||||
clc
|
||||
ret
|
||||
endp lowercase
|
||||
|
||||
;Inverse la casse la chaine ds:%0
|
||||
PROC invertcase FAR
|
||||
ARG @src:word
|
||||
USES si,ax
|
||||
mov si,[@src]
|
||||
@@invertcase:
|
||||
mov al,[ds:si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je @@endinvertcase
|
||||
cmp al,'A'
|
||||
jb @@invertcase
|
||||
cmp al,'Z'
|
||||
jbe @@goinvertcase
|
||||
cmp al,'a'
|
||||
jb @@invertcase
|
||||
cmp al,'z'
|
||||
ja @@invertcase
|
||||
sub [byte ptr si-1],'a'-'A'
|
||||
jmp @@invertcase
|
||||
@@goinvertcase:
|
||||
add [byte ptr si-1],'a'-'A'
|
||||
jmp @@invertcase
|
||||
@@endinvertcase:
|
||||
clc
|
||||
ret
|
||||
endp invertcase
|
||||
|
170
lib/video.asm
|
@ -11,63 +11,41 @@ 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
|
||||
exporting
|
||||
declare print
|
||||
declare showdate
|
||||
declare showtime
|
||||
declare showname
|
||||
declare showattr
|
||||
declare showsize
|
||||
declare showspace
|
||||
declare showint
|
||||
declare showsigned
|
||||
declare showhex
|
||||
declare showbin
|
||||
declare showbcd
|
||||
declare showstring
|
||||
declare showstring0
|
||||
declare showintr
|
||||
declare showintl
|
||||
declare showchar
|
||||
ende
|
||||
|
||||
importing
|
||||
use VIDEO,addline
|
||||
use VIDEO,setcolor
|
||||
use VIDEO,getxy
|
||||
use VIDEO,setxy
|
||||
use VIDEO,setvideomode
|
||||
use VIDEO,setfont
|
||||
use VIDEO,clearscreen
|
||||
use VIDEO,enablescroll
|
||||
use VIDEO,disablescroll
|
||||
use VIDEO,showchars
|
||||
use VIDEO,savestate
|
||||
use VIDEO,restorestate
|
||||
endi
|
||||
|
||||
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
|
||||
|
@ -89,7 +67,7 @@ PROC print FAR
|
|||
je @@special2
|
||||
@@showit:
|
||||
xor ch,ch
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
call [cs:showchars],cx,0FFFFh
|
||||
inc si
|
||||
jmp @@strinaize0
|
||||
@@special:
|
||||
|
@ -100,7 +78,7 @@ PROC print FAR
|
|||
@@notshowit:
|
||||
mov cl,[byte ptr si+1]
|
||||
cmp cl,'c'
|
||||
je @@showchar
|
||||
je @@showchars
|
||||
cmp cl,'u'
|
||||
je @@showint
|
||||
cmp cl,'v'
|
||||
|
@ -132,10 +110,10 @@ PROC print FAR
|
|||
clc
|
||||
jmp @@no0
|
||||
|
||||
@@showchar:
|
||||
@@showchars:
|
||||
cmp [byte ptr si+2],'M'
|
||||
je @@showmultchar
|
||||
call [cs:showchar],[word ptr @@pointer+di+2],0FFFFh
|
||||
call [cs:showchars],[word ptr @@pointer+di+2],0FFFFh
|
||||
add si,2
|
||||
add di,2
|
||||
jmp @@strinaize0
|
||||
|
@ -143,10 +121,10 @@ PROC print FAR
|
|||
mov cx,[offset @@pointer+di+2+2]
|
||||
cmp cx,0
|
||||
je @@nextfunc
|
||||
@@showcharx:
|
||||
call [cs:showchar],[word ptr @@pointer+di+2],0FFFFh
|
||||
@@showcharsx:
|
||||
call [cs:showchars],[word ptr @@pointer+di+2],0FFFFh
|
||||
dec cx
|
||||
jnz @@showcharx
|
||||
jnz @@showcharsx
|
||||
@@nextfunc:
|
||||
add si,3
|
||||
add di,4
|
||||
|
@ -351,7 +329,7 @@ PROC print FAR
|
|||
add al,[si+3]
|
||||
sub al,'0'
|
||||
xor ah,ah
|
||||
call [cs:setvideomode]
|
||||
call [cs:setvideomode],ax
|
||||
add si,4
|
||||
jmp @@strinaize0
|
||||
|
||||
|
@ -380,14 +358,12 @@ PROC print FAR
|
|||
jmp @@strinaize0
|
||||
|
||||
@@savestate:
|
||||
mov ah,40
|
||||
int 47h
|
||||
call [cs:savestate]
|
||||
add si,2
|
||||
jmp @@strinaize0
|
||||
|
||||
@@restorestate:
|
||||
mov ah,41
|
||||
int 47h
|
||||
call [cs:restorestate]
|
||||
add si,2
|
||||
jmp @@strinaize0
|
||||
|
||||
|
@ -422,8 +398,6 @@ PROC print FAR
|
|||
sub bl,'0'
|
||||
xor bh,bh
|
||||
call [cs:setxy],ax,bx
|
||||
mov ah,25
|
||||
int 47h
|
||||
add si,7
|
||||
jmp @@strinaize0
|
||||
|
||||
|
@ -439,7 +413,6 @@ PROC print FAR
|
|||
pop di si cx bx ax
|
||||
mov sp,bp
|
||||
ret
|
||||
|
||||
ENDP print
|
||||
|
||||
|
||||
|
@ -455,12 +428,12 @@ PROC showdate FAR
|
|||
mov dx,[@dates]
|
||||
and dx,11111b
|
||||
call showintl,2,edx
|
||||
call [cs:showchar],'/',0FFFFh
|
||||
call [cs:showchars],'/',0FFFFh
|
||||
mov dx,[@dates]
|
||||
shr dx,5
|
||||
and dx,111b
|
||||
call showintl,2,edx
|
||||
call [cs:showchar],'/',0FFFFh
|
||||
call [cs:showchars],'/',0FFFFh
|
||||
mov dx,[@dates]
|
||||
shr dx,8
|
||||
and dx,11111111b
|
||||
|
@ -482,12 +455,12 @@ PROC showtime FAR
|
|||
shr dx,11
|
||||
and dx,11111b
|
||||
call showintl,2,edx
|
||||
call [cs:showchar],':',0FFFFh
|
||||
call [cs:showchars],':',0FFFFh
|
||||
mov dx,[@times]
|
||||
shr dx,5
|
||||
and dx,111111b
|
||||
call showintl,2,edx
|
||||
call [cs:showchar],':',0FFFFh
|
||||
call [cs:showchars],':',0FFFFh
|
||||
mov dx,[@times]
|
||||
and dx,11111b
|
||||
shl dx,1
|
||||
|
@ -506,12 +479,12 @@ PROC showname FAR
|
|||
mov si,[@thename]
|
||||
xor cx,cx
|
||||
@@showthename:
|
||||
call [cs:showchar],[word ptr ds:si],0FFFFh
|
||||
call [cs:showchars],[word ptr ds:si],0FFFFh
|
||||
inc si
|
||||
inc cx
|
||||
cmp cx,8
|
||||
jne @@suiteaname
|
||||
call [cs:showchar],' ',0FFFFh
|
||||
call [cs:showchars],' ',0FFFFh
|
||||
@@suiteaname:
|
||||
cmp cx,8+3
|
||||
jb @@showthename
|
||||
|
@ -533,7 +506,7 @@ PROC showattr FAR
|
|||
@@noreadonly:
|
||||
push '-'
|
||||
@@readonly:
|
||||
call [cs:showchar]
|
||||
call [cs:showchars]
|
||||
push 0FFFFh
|
||||
test [@attr],00000010b
|
||||
je @@nohidden
|
||||
|
@ -542,7 +515,7 @@ PROC showattr FAR
|
|||
@@nohidden:
|
||||
push '-'
|
||||
@@hidden:
|
||||
call [cs:showchar]
|
||||
call [cs:showchars]
|
||||
push 0FFFFh
|
||||
test [@attr],00000100b
|
||||
je @@nosystem
|
||||
|
@ -551,7 +524,7 @@ PROC showattr FAR
|
|||
@@nosystem:
|
||||
push '-'
|
||||
@@system:
|
||||
call [cs:showchar]
|
||||
call [cs:showchars]
|
||||
push 0FFFFh
|
||||
test [@attr],00100000b
|
||||
je @@noarchive
|
||||
|
@ -560,7 +533,7 @@ PROC showattr FAR
|
|||
@@noarchive:
|
||||
push '-'
|
||||
@@archive:
|
||||
call [cs:showchar]
|
||||
call [cs:showchars]
|
||||
push 0FFFFh
|
||||
test [@attr],00010000b
|
||||
je @@nodirectory
|
||||
|
@ -569,7 +542,7 @@ PROC showattr FAR
|
|||
@@nodirectory:
|
||||
push '-'
|
||||
@@directory:
|
||||
call [cs:showchar]
|
||||
call [cs:showchars]
|
||||
ret
|
||||
ENDP showattr
|
||||
|
||||
|
@ -622,7 +595,7 @@ ENDP showsize
|
|||
;<-
|
||||
;==============================
|
||||
PROC showspace FAR
|
||||
call [cs:showchar],' ',0FFFFh
|
||||
call [cs:showchars],' ',0FFFFh
|
||||
clc
|
||||
ret
|
||||
ENDP showspace
|
||||
|
@ -653,7 +626,7 @@ PROC showint FAR
|
|||
@@showinteger:
|
||||
inc bx
|
||||
mov cl,[cs:bx]
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
call [cs:showchars],cx,0FFFFh
|
||||
dec ax
|
||||
jnz @@showinteger
|
||||
ret
|
||||
|
@ -700,7 +673,7 @@ PROC showintl FAR
|
|||
@@showinteger:
|
||||
inc bx
|
||||
mov cl,[cs:bx]
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
call [cs:showchars],cx,0FFFFh
|
||||
dec ax
|
||||
jnz @@showinteger
|
||||
ret
|
||||
|
@ -745,7 +718,7 @@ PROC showintr FAR
|
|||
@@showinteger:
|
||||
inc bx
|
||||
mov cl,[cs:bx]
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
call [cs:showchars],cx,0FFFFh
|
||||
dec ax
|
||||
jnz @@showinteger
|
||||
ret
|
||||
|
@ -783,9 +756,9 @@ PROC showsigned FAR
|
|||
jbe @@notsigned
|
||||
neg edx
|
||||
@@showminus:
|
||||
call [cs:showchar],'-',0FFFFh
|
||||
call [cs:showchars],'-',0FFFFh
|
||||
@@notsigned:
|
||||
call showint,edx,0FFFFh
|
||||
call showint,edx
|
||||
ret
|
||||
ENDP showsigned
|
||||
|
||||
|
@ -809,7 +782,7 @@ PROC showhex FAR
|
|||
mov bx,dx
|
||||
and bx,0fh
|
||||
mov cl,[cs:bx+offset Tab]
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
call [cs:showchars],cx,0FFFFh
|
||||
dec al
|
||||
jnz @@Hexaize
|
||||
ret
|
||||
|
@ -835,7 +808,7 @@ PROC showbin FAR
|
|||
rol edx,1
|
||||
mov cl,'0'
|
||||
adc cl,0
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
call [cs:showchars],cx,0FFFFh
|
||||
dec al
|
||||
jnz @@binaize
|
||||
ret
|
||||
|
@ -861,7 +834,7 @@ PROC showbcd FAR
|
|||
mov cl,dl
|
||||
and cl,0fh
|
||||
add cl,'0'
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
call [cs:showchars],cx,0FFFFh
|
||||
dec al
|
||||
jnz @@BCDaize
|
||||
ret
|
||||
|
@ -879,12 +852,23 @@ PROC showstring FAR
|
|||
mov bl,[si]
|
||||
@@strinaize:
|
||||
inc si
|
||||
call [cs:showchar],[word ptr si],0FFFFh
|
||||
call [cs:showchars],[word ptr si],0FFFFh
|
||||
dec bl
|
||||
jnz @@strinaize
|
||||
ret
|
||||
ENDP showstring
|
||||
|
||||
;==========showchars===========
|
||||
;Affiche un caractčre %0 aprés le curseur
|
||||
;-> %0 caractčre
|
||||
;<-
|
||||
;===============================
|
||||
PROC showchar FAR
|
||||
ARG @pointer:word
|
||||
call [cs:showchars],[@pointer],0FFFFh
|
||||
ret
|
||||
ENDP showchar
|
||||
|
||||
;==========SHOWSTRING0===========
|
||||
;Affiche une chaine de caractère pointée par ds:%1 aprés le curseur
|
||||
;-> ds:%1 pointeur chaine type zéro terminal
|
||||
|
@ -898,7 +882,7 @@ PROC showstring0 FAR
|
|||
mov cl,[si]
|
||||
cmp cl,0
|
||||
je @@no0
|
||||
call [cs:showchar],cx,0FFFFh
|
||||
call [cs:showchars],cx,0FFFFh
|
||||
inc si
|
||||
jmp @@strinaize0
|
||||
@@no0:
|
||||
|
|
266
noyau/8237.asm
|
@ -1,266 +0,0 @@
|
|||
;****************************************************************
|
||||
; *
|
||||
; Periph‚rique : DMA *
|
||||
; Plages Entr‚es-Sorties : 0000-000F *
|
||||
; 00C0-00DF *
|
||||
; 0080-0090 *
|
||||
; (0094-009F) *
|
||||
; Plages M‚moires : AUCUNES *
|
||||
; *
|
||||
DmaRead equ 044h ;I/O to memory, no autoinit, increment, single mode
|
||||
DmaWrite equ 048h ;Memory to I/O, no autoinit, increment, single mode
|
||||
|
||||
;Lecture des bits du registre d'‚tat (08, D0 )
|
||||
STATUS_REQ3 = 80h ;Bit actif: le canal DMA concern‚
|
||||
STATUS_REQ2 = 40h ;re‡oit une requˆte DMA
|
||||
STATUS_REQ1 = 20h ;Request
|
||||
STATUS_REQ0 = 10h
|
||||
STATUS_TC3 = 08h ;Bit actif: Un transfert DMA a ‚t‚
|
||||
STATUS_TC2 = 04h ;ex‚cut‚ depuis la derniŠre lecture
|
||||
STATUS_TC1 = 02h ;du registre d'‚tat.
|
||||
STATUS_TC0 = 01h ;Terminal Count
|
||||
|
||||
;Ecriture des bits du registre de commande (08, D0)
|
||||
COMMAND_DACKLEVEL = 80h ;Bit 7 actif: ligne DMA Acknowledge HIGH active
|
||||
COMMAND_DREQLEVEL = 40h ;Bit 6 actif: ligne REQ Acknowledge LOW active
|
||||
COMMAND_EXTWRITE = 20h ;Bit 5 actif: EXTENDED Write,sinon LATE Write
|
||||
COMMAND_FIXEDPRI = 10h ;Bit 4 actif: priorit‚ constante
|
||||
COMMAND_COMPRESS = 08h ;Bit 3 actif: compression
|
||||
COMMAND_INACTIVE = 04h ;Bit 2 actif: contr“leur d‚sactiv‚
|
||||
COMMAND_ADH0 = 02h ;Bit 1 actif: Adress Hold pour canal 0/4 d‚sactiv‚
|
||||
COMMAND_MEM2MEM = 01h ;Bit 0 actif: m‚moire/m‚moire, sinon m‚moire/p‚riph‚rie
|
||||
|
||||
;Ecriture des bits du registre de requˆte ( 09, D2 )
|
||||
REQUEST_RESERVED = 0F8h ;R‚glage des bits r‚serv‚s =0
|
||||
REQUEST_SET = 04h ;D‚finir requˆte DMA
|
||||
REQUEST_CLR = 00h ;Supprimer requˆte DMA
|
||||
REQUEST_MSK = 03h ;Indiquer le canal dans les deux bits du bas
|
||||
|
||||
;Ecriture des bits du registre de masquage de canal ( 0A, D4 )
|
||||
CHANNEL_RESERVED = 0F8h ;R‚glage des bits r‚serv‚s =0
|
||||
CHANNEL_SET = 04h ;Masquer/verrouiller canal DMA
|
||||
CHANNEL_CLR = 00h ;Lib‚rer canal DMA
|
||||
CHANNEL_MSK = 03h ;Indiquer le canal dans les deux bits du bas
|
||||
|
||||
;Ecriture des bits du registre de mode (0B,D6)
|
||||
MODE_DEMAND = 00h ;Transf‚rer … la demande
|
||||
MODE_SINGLE = 40h ;Transf‚rer valeurs uniques
|
||||
MODE_BLOCK = 80h ;Transf‚rer en bloc
|
||||
MODE_CASCADE = 0C0h ;Transf‚rer en cascade
|
||||
MODE_DECREMENT = 20h ;D‚cr‚menter
|
||||
MODE_AUTOINIT = 10h ;Autoinitialisation vers la fin
|
||||
MODE_VERIFY = 00h ;V‚rifier
|
||||
MODE_WRITE = 04h ;Ecrire dans la m‚moire
|
||||
MODE_READ = 08h ;Lire depuis la m‚moire
|
||||
MODE_INVALID = 0Ch ;Incorrect
|
||||
MODE_CHANNELMSK = 03h ;Indiquer le canal dans les deux bits du bas
|
||||
|
||||
;Ports du DMA esclave
|
||||
|
||||
DmaStatusS dw 08h ;R SLAVE Registre d'‚tat
|
||||
DmaCommandS dw 08h ;W SLAVE Registre de commande
|
||||
DmaRequestS dw 09h ;W SLAVE Ex‚cuter requˆte DMA
|
||||
DmachMaskS dw 0ah ;W SLAVE Masquer canaux
|
||||
DmaModeS dw 0bh ;W SLAVE Mode de transfert
|
||||
DmaFlipFlopS dw 0ch ;W SLAVE Flipflop adr/compteur
|
||||
DmaTempS dw 0dh ;R SLAVE Reset du contr“leur
|
||||
DmaClearS dw 0dh ;R SLAVE Registre temporaire
|
||||
DmaMaskClrS dw 0eh ;R SLAVE Lib‚rer canaux
|
||||
DmaMaskS dw 0fh ;R SLAVE Masquer canaux
|
||||
|
||||
;Ports du DMA esclave
|
||||
|
||||
DmaStatusM dw 0D0h ;R MASTER Registre d'‚tat
|
||||
DmaCommandM dw 0D0h ;W MASTER Registre de commande
|
||||
DmaRequestM dw 0D2h ;W MASTER Ex‚cuter requˆte DMA
|
||||
DmaMaskM dw 0D4h ;W MASTER Masquer canaux
|
||||
DmaModeM dw 0D6h ;W MASTER Mode de transfert
|
||||
DmaFlipFlopM dw 0D8h ;W MASTER Flipflop adr/compteur
|
||||
DmaTempM dw 0DAh ;R MASTER Reset du contr“leur
|
||||
DmaClearM dw 0DAh ;R MASTER Registre temporaire
|
||||
DmaMaskClrM dw 0DCh ;R MASTER Lib‚rer canaux
|
||||
DmaMaskM2 dw 0DEh ;R MASTER Masquer canaux
|
||||
|
||||
DmaAdress db 00h ;DMA address register 0
|
||||
db 002h ;DMA address register 1
|
||||
db 004h ;DMA address register 2
|
||||
db 006h ;DMA address register 3
|
||||
db 0c0h ;DMA address register 4
|
||||
db 0c4h ;DMA address register 5
|
||||
db 0c8h ;DMA address register 6
|
||||
db 0cch ;DMA address register 7
|
||||
|
||||
DmaCount db 001h ;DMA count registers 0
|
||||
db 003h ;DMA count registers 1
|
||||
db 005h ;DMA count registers 2
|
||||
db 007h ;DMA count registers 3
|
||||
db 0c2h ;DMA count registers 4
|
||||
db 0c6h ;DMA count registers 5
|
||||
db 0cah ;DMA count registers 6
|
||||
db 0ceh ;DMA count registers 7
|
||||
|
||||
DmaPage db 087h ;DMA page registers 0
|
||||
db 083h ;DMA page registers 1
|
||||
db 081h ;DMA page registers 2
|
||||
db 082h ;DMA page registers 3
|
||||
db 08fh ;DMA page registers 4
|
||||
db 08bh ;DMA page registers 5
|
||||
db 089h ;DMA page registers 6
|
||||
db 08ah ;DMA page registers 7
|
||||
|
||||
;verouille le canal AL
|
||||
DisableDma:
|
||||
push ax dx
|
||||
cmp al, 4
|
||||
jae MasterDisableDma
|
||||
mov dx, DmaMaskS
|
||||
or al, 00000100b
|
||||
out dx, al
|
||||
jmp EndDisableDma
|
||||
MasterDisableDma:
|
||||
mov dx, DmaMaskS
|
||||
and al, 00000011b
|
||||
or al, 00000100b
|
||||
out dx, al
|
||||
EndDisableDma:
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
;déverouille le canal AL
|
||||
EnableDma:
|
||||
push ax dx
|
||||
cmp al, 4
|
||||
jae MasterDisableDma
|
||||
mov dx, DmaMaskS
|
||||
out dx, al
|
||||
jmp EndEnableDma
|
||||
MasterEnableDma:
|
||||
mov dx, DmaMaskS
|
||||
and al, 00000011b
|
||||
out dx, al
|
||||
EndEnableDma:
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
;Efface le FlipFlop canal AL
|
||||
ClrDmaFlipFlop:
|
||||
push ax dx
|
||||
cmp al, 4
|
||||
jae MasterClrFlipFlopDma
|
||||
mov dx,DmaFlipFlopS
|
||||
xor ax, ax
|
||||
out dx, al
|
||||
jmp EndClrFlipFlopDma
|
||||
MasterClrFlipFlopDma:
|
||||
mov dx,DmaFlipFlopM
|
||||
xor ax, ax
|
||||
out dx, al
|
||||
EndClrFlipFlopDma:
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
;Met le mode du canal al à ah
|
||||
SetDmaMode:
|
||||
push ax dx
|
||||
cmp al, 4
|
||||
jae MasterSetDmaMode
|
||||
mov dx,DmaModeS
|
||||
or al, ah
|
||||
out dx, al
|
||||
jmp EndSetDmaMode
|
||||
MasterSetDmaMode:
|
||||
mov dx,DmaModeM
|
||||
and al, 00000011b
|
||||
or al, ah
|
||||
out dx, al
|
||||
EndSetDmaMode:
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
|
||||
;Met le page du canal al a ah
|
||||
SetDmaPage:
|
||||
push ax bx dx si
|
||||
cmp al, 4
|
||||
jae MasterSetDmaPage
|
||||
mov si, offset DmaPage
|
||||
xor dh, dh
|
||||
xor bh, bh
|
||||
mov bl, al
|
||||
mov dl, cs:[si+bx]
|
||||
xchg al, ah
|
||||
out dx, al
|
||||
jmp EndSetDmaPage
|
||||
MasterSetDmaPage:
|
||||
EndSetDmaPage:
|
||||
pop si dx bx ax
|
||||
ret
|
||||
|
||||
;Met l'adresse du canal al a DS:BX
|
||||
SetDmaAdress:
|
||||
push ax bx cx dx si
|
||||
push ax
|
||||
mov ax, ds
|
||||
and ax, 0000111111111111b
|
||||
shl ax,4
|
||||
add bx, ax
|
||||
mov ax, ds
|
||||
and ax, 1111000000000000b
|
||||
shr ax, 4
|
||||
mov cx,ax
|
||||
pop ax
|
||||
push ax
|
||||
add ax,cx
|
||||
call SetDmaPage
|
||||
pop ax
|
||||
call ClrDmaFlipFlop
|
||||
mov si, offset DmaAdress
|
||||
xor dh, dh
|
||||
push bx
|
||||
xor bh, bh
|
||||
mov bl, al
|
||||
mov dl, byte ptr cs:[si+bx]
|
||||
pop bx
|
||||
cmp al, 4
|
||||
jae MasterSetDmaAddress
|
||||
mov al, bh
|
||||
out dx, al
|
||||
mov al, bl
|
||||
out dx, al
|
||||
jmp EndSetDmaAddress
|
||||
MasterSetDmaAddress:
|
||||
mov al, bh
|
||||
out dx, al
|
||||
call ClrDmaFlipFlop
|
||||
mov al, bl
|
||||
out dx, al
|
||||
EndSetDmaAddress:
|
||||
pop si dx cx bx ax
|
||||
ret
|
||||
|
||||
;Spécifie au controleur DMA le nombre d'octets à transférer dans CX
|
||||
SetDmaCount:
|
||||
push ax bx dx si
|
||||
call ClrDmaFlipFlop
|
||||
mov si, offset DmaCount
|
||||
xor dh, dh
|
||||
xor bh, bh
|
||||
mov bl, al
|
||||
mov dl, byte ptr cs:[si+bx]
|
||||
cmp al, 4
|
||||
jae MasterSetDmaCount
|
||||
mov al, ch
|
||||
out dx, al
|
||||
mov al, cl
|
||||
out dx, al
|
||||
jmp EndSetDmaCount
|
||||
MasterSetDmaCount:
|
||||
mov al, ch
|
||||
out dx, al
|
||||
call ClrDmaFlipFlop
|
||||
mov al, cl
|
||||
out dx, al
|
||||
EndSetDmaCount:
|
||||
pop si dx bx ax
|
||||
ret
|
||||
|
277
noyau/8259a.asm
|
@ -91,7 +91,7 @@ endp seteoi
|
|||
|
||||
|
||||
;Lit les masques d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1
|
||||
PROC readmaskirq FAR
|
||||
PROC readimr FAR
|
||||
ARG @controleur:word
|
||||
USES bx,dx
|
||||
mov bx,[@controleur]
|
||||
|
@ -104,7 +104,7 @@ PROC readmaskirq FAR
|
|||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
endp readmaskirq
|
||||
endp readimr
|
||||
|
||||
;Lit le registre d'‚tat d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1
|
||||
PROC readisr FAR
|
||||
|
@ -140,3 +140,276 @@ PROC readirr FAR
|
|||
in al,dx
|
||||
ret
|
||||
endp readirr
|
||||
|
||||
;carry si enable et pas carry si pas enable
|
||||
PROC isenableirq 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 cx,7
|
||||
in al,dx
|
||||
neg al
|
||||
bt ax,cx
|
||||
ret
|
||||
endp isenableirq
|
||||
|
||||
|
||||
;carry si enable et pas carry si pas enable
|
||||
PROC isinserviceirq FAR
|
||||
ARG @irq:word
|
||||
USES ax,cx,dx
|
||||
mov ax,[@irq]
|
||||
mov dx,MASTERPIC
|
||||
cmp al,7
|
||||
jbe @@master
|
||||
mov dx,SLAVEPIC
|
||||
@@master:
|
||||
mov cl,al
|
||||
mov al,ISR
|
||||
out dx,al
|
||||
and cx,7
|
||||
in al,dx
|
||||
neg al
|
||||
bt ax,cx
|
||||
ret
|
||||
endp isinserviceirq
|
||||
|
||||
|
||||
;carry si enable et pas carry si pas enable
|
||||
PROC isrequestirq FAR
|
||||
ARG @irq:word
|
||||
USES ax,cx,dx
|
||||
mov ax,[@irq]
|
||||
mov dx,MASTERPIC
|
||||
cmp al,7
|
||||
jbe @@master
|
||||
mov dx,SLAVEPIC
|
||||
@@master:
|
||||
mov cl,al
|
||||
mov al,IRR
|
||||
out dx,al
|
||||
and cx,7
|
||||
in al,dx
|
||||
neg al
|
||||
bt ax,cx
|
||||
ret
|
||||
endp isrequestirq
|
||||
|
||||
|
||||
PROC installirqhandler FAR
|
||||
USES eax,bx,cx,edx,si,di,ds,es
|
||||
push fs
|
||||
call mbcreate,offset interruptionbloc,256*size ints
|
||||
mov es,ax
|
||||
mov ax,0x0000
|
||||
mov ds,ax
|
||||
xor si,si
|
||||
@@searchdummypointer:
|
||||
mov fs,[(vector si).data.seg]
|
||||
mov bx,[(vector si).data.off]
|
||||
cmp [byte ptr fs:bx],0xCF ;iret
|
||||
je @@founded
|
||||
add si,size vector
|
||||
cmp si,256*4
|
||||
jb @@searchdummypointer
|
||||
xor edx,edx
|
||||
jmp @@suite
|
||||
@@founded:
|
||||
mov edx,[(vector si).content]
|
||||
@@suite:
|
||||
xor cx,cx
|
||||
xor si,si
|
||||
xor di,di
|
||||
cli
|
||||
@@copy:
|
||||
mov [es:(ints di).number],cl
|
||||
mov [es:(ints di).locked],0
|
||||
mov [es:(ints di).vector1.content],0
|
||||
mov [es:(ints di).vector3.content],0
|
||||
mov [es:(ints di).vector4.content],0
|
||||
mov [es:(ints di).vector5.content],0
|
||||
mov [es:(ints di).vector6.content],0
|
||||
mov [es:(ints di).vector7.content],0
|
||||
mov [es:(ints di).vector8.content],0
|
||||
mov [es:(ints di).launchedlow],0
|
||||
mov [es:(ints di).launchedhigh],0
|
||||
mov [es:(ints di).calledlow],0
|
||||
mov [es:(ints di).calledhigh],0
|
||||
mov eax,[(vector si).content]
|
||||
cmp eax,edx
|
||||
je @@notarealvector
|
||||
mov [es:(ints di).vector1.content],eax
|
||||
mov [es:(ints di).activated],1
|
||||
jmp @@copynext
|
||||
@@notarealvector:
|
||||
mov [es:(ints di).vector1.content],0
|
||||
mov [es:(ints di).activated],0
|
||||
@@copynext:
|
||||
mov bx,cx
|
||||
shl bx,3
|
||||
sub bx,cx
|
||||
add bx,offset coupling
|
||||
mov [(vector si).data.seg],cs
|
||||
mov [(vector si).data.off],bx
|
||||
add si,size vector
|
||||
add di,size ints
|
||||
inc cl
|
||||
cmp cl,0
|
||||
jne @@copy
|
||||
@@end:
|
||||
pop fs
|
||||
sti
|
||||
ret
|
||||
endp installirqhandler
|
||||
|
||||
|
||||
interruptionbloc db '/interrupts',0
|
||||
|
||||
|
||||
PROC savecontext FAR
|
||||
ARG @pointer:word
|
||||
USES eax,si,ds
|
||||
pushfd
|
||||
push eax
|
||||
push ebx
|
||||
push ecx
|
||||
push edx
|
||||
push esi
|
||||
push edi
|
||||
push ds
|
||||
push es
|
||||
push fs
|
||||
push gs
|
||||
push ss
|
||||
mov si,[@pointer]
|
||||
mov ds,[ss:bp+4]
|
||||
mov eax,ebp
|
||||
mov ax,[word ptr ss:bp]
|
||||
push eax
|
||||
push [word ptr ss:bp+4]
|
||||
xor eax,eax
|
||||
mov ax,[word ptr ss:bp+2]
|
||||
push eax
|
||||
mov ax,bp
|
||||
add ax,4
|
||||
push eax
|
||||
pop [(regs si).sesp]
|
||||
pop [(regs si).seip]
|
||||
pop [(regs si).scs]
|
||||
pop [(regs si).sebp]
|
||||
pop [(regs si).sss]
|
||||
pop [(regs si).sgs]
|
||||
pop [(regs si).sfs]
|
||||
pop [(regs si).ses]
|
||||
pop [(regs si).sds]
|
||||
pop [(regs si).sedi]
|
||||
pop [(regs si).sesi]
|
||||
pop [(regs si).sedx]
|
||||
pop [(regs si).secx]
|
||||
pop [(regs si).sebx]
|
||||
pop [(regs si).seax]
|
||||
pop [(regs si).seflags]
|
||||
ret
|
||||
endp savecontext
|
||||
|
||||
PROC restorecontextg FAR
|
||||
ARG @pointer:word
|
||||
mov si,[@pointer]
|
||||
pushd [cs:(regs si).sesi]
|
||||
pushd [cs:(regs si).seflags]
|
||||
mov eax,[cs:(regs si).seax]
|
||||
mov ebx,[cs:(regs si).sebx]
|
||||
mov ecx,[cs:(regs si).secx]
|
||||
mov edx,[cs:(regs si).sedx]
|
||||
mov edi,[cs:(regs si).sedi]
|
||||
mov ebp,[cs:(regs si).sebp]
|
||||
mov es,[cs:(regs si).ses]
|
||||
mov fs,[cs:(regs si).sfs]
|
||||
mov gs,[cs:(regs si).sgs]
|
||||
mov ds,[cs:(regs si).sds]
|
||||
popfd
|
||||
pop esi
|
||||
pop [cs:dummy]
|
||||
db 0xCA,0x02,0x00 ;retf 2
|
||||
endp restorecontextg
|
||||
|
||||
|
||||
|
||||
coupling:
|
||||
counter = 0
|
||||
REPEAT 256
|
||||
push counter+256
|
||||
push offset irqhandlers
|
||||
ret
|
||||
counter = counter + 1
|
||||
ENDM
|
||||
|
||||
interrupt dw 0
|
||||
dummy dw 0
|
||||
calling_reg regs <>
|
||||
function_reg regs <>
|
||||
|
||||
irqhandlers:
|
||||
cli
|
||||
pop [cs:interrupt]
|
||||
call savecontext,offset calling_reg
|
||||
call irqhandler,[cs:interrupt]
|
||||
call restorecontextg,offset calling_reg
|
||||
sti
|
||||
iret
|
||||
|
||||
PROC irqhandler NEAR
|
||||
ARG @int:word
|
||||
push cs
|
||||
pop ds
|
||||
call mbfindsb,offset interruptionbloc,cs
|
||||
jc @@end
|
||||
mov es,ax
|
||||
mov ax,[@int]
|
||||
sub ax,256
|
||||
mov cx,size ints
|
||||
mul cx
|
||||
mov si,ax
|
||||
add [es:(ints si).calledlow],1
|
||||
adc [es:(ints si).calledhigh],0
|
||||
cmp [es:(ints si).activated],1
|
||||
jne @@end
|
||||
add [es:(ints si).launchedlow],1
|
||||
adc [es:(ints si).launchedhigh],0
|
||||
lea si,[es:(ints si).vector1]
|
||||
mov cl,8
|
||||
@@launchall:
|
||||
cmp [es:(vector si).content],0
|
||||
je @@end
|
||||
push [word ptr cs:calling_reg.seflags]
|
||||
push cs
|
||||
push offset @@back
|
||||
push [es:(vector si).data.seg]
|
||||
push [es:(vector si).data.off]
|
||||
call savecontext,offset function_reg
|
||||
call restorecontextg,offset calling_reg
|
||||
db 0xCB
|
||||
@@back:
|
||||
cli
|
||||
call savecontext,offset calling_reg
|
||||
call restorecontextg,offset function_reg
|
||||
@@next:
|
||||
add si,size vector
|
||||
dec cl
|
||||
jnz @@launchall
|
||||
@@end:
|
||||
ret
|
||||
endp irqhandler
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
asm= lzasm
|
||||
asm= lzasm /z/t
|
||||
lnk= elink
|
||||
|
||||
all: systeme.sys boot.bin
|
||||
|
||||
systeme.sys: video.obj systeme.obj
|
||||
systeme.sys: video.obj disque.obj systeme.obj
|
||||
$(lnk) systeme.obj systeme.sys
|
||||
|
||||
systeme.obj: ../lib/detect.lib ../lib/video.lib video.sys
|
||||
systeme.obj: ..\lib\detect.lib ..\lib\video.lib video.sys disque.sys
|
||||
$(asm) systeme.asm
|
||||
|
||||
disque.sys:
|
||||
$(lnk) disque.obj disque.sys
|
||||
|
||||
video.sys:
|
||||
$(lnk) video.obj video.sys
|
||||
|
@ -16,12 +18,12 @@ video.sys:
|
|||
boot.bin: boot.obj
|
||||
$(lnk) boot.obj boot.bin /bs
|
||||
|
||||
detect.obj:
|
||||
$(asm) detect.asm
|
||||
|
||||
video.obj:
|
||||
$(asm) video.asm
|
||||
|
||||
disque.obj:
|
||||
$(asm) disque.asm
|
||||
|
||||
boot.obj:
|
||||
$(asm) boot.asm
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ oksystem:
|
|||
mov si,offset syst
|
||||
call showstr
|
||||
mov cx,[di+26]
|
||||
mov ax,0900h
|
||||
mov ax,8000h
|
||||
mov es,ax
|
||||
push es
|
||||
mov di,0000h
|
||||
|
|
|
@ -1,261 +0,0 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
|
||||
jmp tsr
|
||||
offsets dd 0
|
||||
db 'KEYBOARD'
|
||||
tsr:
|
||||
pushf
|
||||
db 2eh,0ffh,1eh
|
||||
dw offsets
|
||||
cli
|
||||
cmp cs:isstate,1
|
||||
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 cs:isstate,0
|
||||
mov eax,cs:eaxr
|
||||
endofforce:
|
||||
sti
|
||||
iret
|
||||
isstate db 0
|
||||
infos db 40 dup (0)
|
||||
feax dd 0
|
||||
|
||||
F10:
|
||||
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
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
mov al,cs:[di+7]
|
||||
inc al
|
||||
cmp al,9
|
||||
jbe notabove
|
||||
mov al,0
|
||||
notabove:
|
||||
mov ah,0
|
||||
int 47h
|
||||
pop es di ax
|
||||
jmp endof
|
||||
|
||||
|
||||
f12:
|
||||
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
|
||||
|
||||
end start
|
1434
noyau/disque.asm
911
noyau/format.asm
|
@ -1,911 +0,0 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
jmp tsr ;Saute à la routine résidente
|
||||
names db 'FORMAT' ;Nom drivers
|
||||
id dw 1234h ;Identifiant drivers
|
||||
Tsr:
|
||||
cli ;Désactive interruptions logiciellement
|
||||
cmp ax,cs:ID ;Compare si test de chargement
|
||||
jne nomore ;Si pas test alors on continu
|
||||
rol ax,3*4 ;Rotation de 3 chiffre de l'ID pour montrer que le drivers est chargé
|
||||
jmp itsok ;On termine l'int avec notre code d'ID preuve du bon chargement de VIDEO
|
||||
nomore:
|
||||
cmp ah,maxfunc
|
||||
jbe noerrorint
|
||||
stc
|
||||
jmp itsok
|
||||
noerrorint:
|
||||
clc
|
||||
push bx
|
||||
mov bl,ah ;On calcule d'aprés le n° de fonction
|
||||
xor bh,bh ;quel sera l'entrée dans la table indexée
|
||||
shl bx,1 ;des adresses fonctions.
|
||||
mov bx,cs:[bx+tables] ;On récupère cette adresse depuis la table
|
||||
mov cs:current,bx ;On la stocke temporairement pour obtenir les registres d'origine
|
||||
pop bx
|
||||
clc
|
||||
call cs:current ;Puis on execute la fonction
|
||||
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 ?
|
||||
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
|
||||
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
|
||||
endofint:
|
||||
pop bp
|
||||
sti ;On réactive les interruptions logiciellement
|
||||
iret ;Puis on retourne au programme appelant.
|
||||
|
||||
current dw 0 ;Mot temporaire qui contient l'adresse de la fonction appelée
|
||||
tables dw setvideomode ;Table qui contient les adresses de toutes les fonctions de VIDEO (WORD)
|
||||
|
||||
|
||||
;Librairie qui prend en charge le format de STR ASCIIZ
|
||||
;# nombre 8
|
||||
;@ str 7
|
||||
;& nom 6
|
||||
|
||||
;High Low
|
||||
;0 variable 4 hex
|
||||
;1 byte 3 dec
|
||||
;2 word 2 oct
|
||||
;3 3 octets 1 bin
|
||||
;4 dword 5 adresse
|
||||
;5 5 octets 6 nom
|
||||
;6 ... 7 str
|
||||
; 8 nombre
|
||||
|
||||
|
||||
;Renvoie carry si la syntaxe de ds:si n'est pas respect‚ par rapport a es:di
|
||||
CheckSyntax0:
|
||||
push ax bx dx bp si di ds es
|
||||
push es di
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset temp2
|
||||
call copy0
|
||||
mov si,di
|
||||
push cs
|
||||
pop ds
|
||||
pop di es
|
||||
call getdelimiter0
|
||||
mov bp,dx
|
||||
mov dl,' '
|
||||
call setdelimiter0
|
||||
call compressdelimiter0
|
||||
call uppercase0
|
||||
call getnbitems0
|
||||
;call xch
|
||||
;mov ax,cx
|
||||
;call getnbitem0
|
||||
;call xch
|
||||
;cmp ax,cx
|
||||
;call xch
|
||||
;jne notequalatall
|
||||
mov bx,cx
|
||||
xor cx,cx
|
||||
itemer:
|
||||
call whatisitem0
|
||||
mov dx,ax
|
||||
call xch
|
||||
call whatisitem0
|
||||
call xch
|
||||
cmp ax,dx
|
||||
jne prob
|
||||
cmp al,6
|
||||
jb equal
|
||||
call cmpitems0
|
||||
je equal
|
||||
prob:
|
||||
cmp dl,4
|
||||
ja nosize
|
||||
cmp al,8
|
||||
je equal
|
||||
cmp al,4
|
||||
jne notequalatall
|
||||
cmp dh,ah
|
||||
ja notequalatall
|
||||
jmp equal
|
||||
nosize:
|
||||
cmp al,7
|
||||
jne noname
|
||||
cmp ah,0
|
||||
jne notequalatall
|
||||
jmp equal
|
||||
noname:
|
||||
cmp al,8
|
||||
je equal
|
||||
jmp notequalatall
|
||||
equal:
|
||||
inc cx
|
||||
cmp cx,bx
|
||||
jne itemer
|
||||
cld
|
||||
ackno:
|
||||
mov dx,bp
|
||||
call setdelimiter0
|
||||
pop es ds di si bp dx bx ax
|
||||
ret
|
||||
notequalatall:
|
||||
stc
|
||||
jmp ackno
|
||||
xch:
|
||||
push ds
|
||||
push es
|
||||
pop ds
|
||||
pop es
|
||||
xchg si,di
|
||||
ret
|
||||
|
||||
temp2 db 256 dup (0)
|
||||
|
||||
;Compare les ‚l‚ments cx de deux chaine ds:si et es:di
|
||||
Cmpitems0:
|
||||
push cx dx si di
|
||||
push cx di
|
||||
call getpointeritem0
|
||||
mov si,di
|
||||
xor cx,cx
|
||||
inc cx
|
||||
call getpointeritem0
|
||||
mov dx,di
|
||||
sub dx,si
|
||||
dec cx
|
||||
pop di cx
|
||||
push ds si
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
call getpointeritem0
|
||||
pop si ds
|
||||
mov cx,dx
|
||||
rep cmpsb
|
||||
pop di si dx cx
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;Renvoie l'‚l‚ment cx de ds:si dans edx si nb et dans es:di si str ou name
|
||||
gettypeditem0:
|
||||
push bx cx si
|
||||
call getpointeritem0
|
||||
mov si,di
|
||||
xor cx,cx
|
||||
inc cl
|
||||
call getpointeritem0
|
||||
mov bx,di
|
||||
dec bx
|
||||
mov cl,0
|
||||
xchg cl,ds:[bx]
|
||||
call gettyped0
|
||||
xchg cl,ds:[bx]
|
||||
pop si cx bx
|
||||
ret
|
||||
|
||||
;Renvoie ds:si dans edx si nb et dans es:di si str ou name
|
||||
gettyped0:
|
||||
push ax
|
||||
call whatis0
|
||||
cmp al,5
|
||||
jb number
|
||||
cmp al,6
|
||||
je pointer
|
||||
push ds
|
||||
pop es
|
||||
call getpointeritem0
|
||||
jmp endofGettypeditem0
|
||||
number:
|
||||
mov edx,cs:lastnumber
|
||||
jmp endofgettypeditem0
|
||||
pointer:
|
||||
call str0toadress
|
||||
endofgettypeditem0:
|
||||
pop ax
|
||||
ret
|
||||
|
||||
;Renvoie dans ax le type de la str0 point‚e par ds:si ‚l‚ment cx
|
||||
whatisitem0:
|
||||
push bx cx si di
|
||||
call getpointeritem0
|
||||
mov si,di
|
||||
xor cx,cx
|
||||
inc cl
|
||||
call getpointeritem0
|
||||
mov bx,di
|
||||
dec bx
|
||||
mov cl,0
|
||||
xchg cl,ds:[bx]
|
||||
call whatis0
|
||||
xchg cl,ds:[bx]
|
||||
pop di si cx bx
|
||||
ret
|
||||
|
||||
;Renvoie dans ax le type de la str0 point‚e par ds:si
|
||||
;High Low
|
||||
;0 variable 4 hex
|
||||
;1 byte 3 dec
|
||||
;2 word 2 oct
|
||||
;3 3 octets 1 bin
|
||||
;4 dword 5 adresse
|
||||
;5 5 octets 6 name
|
||||
;6 ... 7 str
|
||||
whatis0:
|
||||
push bx cx edx
|
||||
mov cl,2
|
||||
call str0isbase
|
||||
jnc finbase
|
||||
mov cl,8
|
||||
call str0isbase
|
||||
jnc finbase
|
||||
mov cl,10
|
||||
call str0isbase
|
||||
jnc finbase
|
||||
mov cl,16
|
||||
call str0isbase
|
||||
jc testadress
|
||||
finbase:
|
||||
mov bx,cx
|
||||
xor ch,ch
|
||||
mov al,cs:[bx+offset basenn-2]
|
||||
call str0toint
|
||||
mov cs:Lastnumber,edx
|
||||
cmp edx,0000FFFFh
|
||||
ja bits32
|
||||
cmp dx,00FFh
|
||||
ja bits16
|
||||
mov ah,1
|
||||
jmp endofwhat
|
||||
bits16:
|
||||
mov ah,2
|
||||
jmp endofwhat
|
||||
bits32:
|
||||
mov ah,3
|
||||
jmp endofwhat
|
||||
testadress:
|
||||
call str0isadress
|
||||
jc testname
|
||||
mov ax,0005h
|
||||
jmp endofwhat
|
||||
testname:
|
||||
;call str0isname
|
||||
;jc testvarstr
|
||||
;jnc isok
|
||||
;mov al,06h
|
||||
cmp byte ptr [si],'&'
|
||||
jne testvarstr
|
||||
mov al,06h
|
||||
call getlength0
|
||||
dec cl
|
||||
mov ah,cl
|
||||
jmp endofwhat
|
||||
testvarstr:
|
||||
cmp byte ptr [si],'@'
|
||||
jne testnumber
|
||||
mov al,07h
|
||||
call getlength0
|
||||
dec cl
|
||||
mov ah,cl
|
||||
jmp endofwhat
|
||||
testnumber:
|
||||
cmp byte ptr [si],'#'
|
||||
jne isstr
|
||||
mov al,8
|
||||
call getlength0
|
||||
dec cl
|
||||
mov ah,cl
|
||||
jmp endofwhat
|
||||
isstr:
|
||||
mov al,07h
|
||||
call getlength0
|
||||
mov ah,cl
|
||||
endofwhat:
|
||||
pop edx cx bx
|
||||
ret
|
||||
|
||||
Lastnumber dd 0
|
||||
|
||||
;Renvoie non carry si la str ds:si point‚e peut ˆtre une adresse
|
||||
str0isadress:
|
||||
;push
|
||||
stc
|
||||
;pop
|
||||
ret
|
||||
|
||||
;Renvoie en es:di le pointeur str0 ds:si
|
||||
Str0toAdress:
|
||||
;push
|
||||
stc
|
||||
;pop
|
||||
ret
|
||||
|
||||
;Renvoie non carry si la str ds:si point‚e peut ˆtre un nom de fichier
|
||||
str0isname:
|
||||
push ax si di
|
||||
isname:
|
||||
mov al,[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je itsok
|
||||
mov di,offset non
|
||||
verify:
|
||||
mov ah,[di]
|
||||
inc di
|
||||
cmp ah,0FFh
|
||||
je isname
|
||||
cmp ah,al
|
||||
jne verify
|
||||
stc
|
||||
jmp itsdead
|
||||
itsok:
|
||||
clc
|
||||
itsdead:
|
||||
pop di si ax
|
||||
ret
|
||||
|
||||
non db '/<>|"?*:\',01,0FFh
|
||||
|
||||
;Renvoie non carry si le texte point‚ par si est de la base cl
|
||||
str0isbase:
|
||||
push ax cx si di es
|
||||
push cs
|
||||
pop es
|
||||
mov ah,cl
|
||||
isstrbase:
|
||||
mov al,[si]
|
||||
cmp al,0
|
||||
je okbase
|
||||
mov cl,ah
|
||||
xor ch,ch
|
||||
mov di,cx
|
||||
cmp al,es:[di-2+offset basen]
|
||||
je verifbase
|
||||
xor ch,ch
|
||||
inc cl
|
||||
mov di,offset base
|
||||
cld
|
||||
repne scasb
|
||||
cmp cx,0
|
||||
je nobase
|
||||
inc si
|
||||
jmp isstrbase
|
||||
okbase:
|
||||
clc
|
||||
endbase:
|
||||
pop es di si cx ax
|
||||
ret
|
||||
verifbase:
|
||||
cmp byte ptr [si+1],0
|
||||
je okbase
|
||||
nobase:
|
||||
stc
|
||||
jmp endbase
|
||||
|
||||
temp dw 0
|
||||
|
||||
;Converti un str de base cl en int dans edx
|
||||
str0toint:
|
||||
push eax bx ecx si edi ebp es
|
||||
push cs
|
||||
pop es
|
||||
mov ah,cl
|
||||
mov cs:temp,si
|
||||
gotos:
|
||||
cmp byte ptr [si+1], 0
|
||||
je oklo
|
||||
inc si
|
||||
jmp gotos
|
||||
oklo:
|
||||
mov edi,1
|
||||
xor ebp,ebp
|
||||
mov bl,cl
|
||||
baseto:
|
||||
cmp si,cs:temp
|
||||
jb endbaseto
|
||||
mov al,[si]
|
||||
xor ecx,ecx
|
||||
mov cl,bl
|
||||
inc cl
|
||||
push di
|
||||
mov di,offset base
|
||||
cld
|
||||
repne scasb
|
||||
pop di
|
||||
jne noop
|
||||
sub cl,bl
|
||||
neg cl
|
||||
mov eax,edi
|
||||
mul ecx
|
||||
add ebp,eax
|
||||
mov eax,edi
|
||||
mov cl,bl
|
||||
mul ecx
|
||||
mov edi,eax
|
||||
noop:
|
||||
dec si
|
||||
jmp baseto
|
||||
endbaseto:
|
||||
mov edx,ebp
|
||||
pop es ebp edi si ecx bx eax
|
||||
ret
|
||||
base db '0123456789ABCDEF'
|
||||
basen db 'B O D H'
|
||||
basenn db 1,0,0,0,0,0,2,0,3,0,0,0,0,0,4
|
||||
|
||||
;Renvoie en es:di la partie de cx caractŠres a partir de la gauche de ds:si
|
||||
Left0:
|
||||
push ax cx si di
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;Renvoie en es:di la partie de cx caractŠres a partir de la droite de ds:si
|
||||
Right0:
|
||||
push ax cx dx si di
|
||||
mov dx,cx
|
||||
call getlength0
|
||||
add si,cx
|
||||
sub si,dx
|
||||
mov cx,dx
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si dx cx ax
|
||||
ret
|
||||
|
||||
;Renvoie en es:di la partie de cx caractŠres a partir de la position bx de ds:si
|
||||
middle0:
|
||||
push ax cx si di
|
||||
add si,bx
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;Rempli de cx caractŠres dl a partir de la position bx de ds:si
|
||||
Fill0:
|
||||
push ax bx cx si di es
|
||||
push ds
|
||||
pop es
|
||||
add si,bx
|
||||
mov al,dl
|
||||
mov di,si
|
||||
cld
|
||||
rep stosb
|
||||
pop es di si cx bx ax
|
||||
ret
|
||||
|
||||
;Remplace tout les caractŠres al de ds:si par des caractŠres dl
|
||||
ReplaceAllchar0:
|
||||
push ax cx di es
|
||||
call GetLength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
findandchange:
|
||||
repne scasb
|
||||
cmp cx,0
|
||||
je endofchange
|
||||
mov es:[di-1],dl
|
||||
jmp findandchange
|
||||
endofchange:
|
||||
pop es di cx ax
|
||||
ret
|
||||
|
||||
|
||||
;Recherche un caractŠre dl dans la chaŒne ds:si
|
||||
SearchChar0:
|
||||
push ax cx di es
|
||||
call GetLength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,dl
|
||||
repne scasb
|
||||
pop es di cx ax
|
||||
ret
|
||||
|
||||
;Inverse la chaine point‚e en ds:si
|
||||
invert0:
|
||||
push ax cx si di es
|
||||
call GetLength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
add di,cx
|
||||
dec di
|
||||
revert:
|
||||
mov al,[si]
|
||||
xchg al,es:[di]
|
||||
mov [si],al
|
||||
inc si
|
||||
dec di
|
||||
cmp si,di
|
||||
je finishinvert
|
||||
dec di
|
||||
cmp si,di
|
||||
je finishinvert
|
||||
inc di
|
||||
jmp revert
|
||||
finishinvert:
|
||||
pop es di si cx ax
|
||||
ret
|
||||
|
||||
;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal
|
||||
cmpstr0:
|
||||
push cx dx si di
|
||||
call GetLength0
|
||||
mov dx,cx
|
||||
push ds si
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
call GetLength0
|
||||
pop si ds
|
||||
cmp cx,dx
|
||||
jne NotEqual
|
||||
repe cmpsb
|
||||
NotEqual:
|
||||
pop di si dx cx
|
||||
ret
|
||||
|
||||
;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal et renvoie le nb de caractŠre egaux dans dx
|
||||
evalue0:
|
||||
push cx si di
|
||||
push ds si
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
call GetLength0
|
||||
pop si ds
|
||||
mov dx,cx
|
||||
repe cmpsb
|
||||
pushf
|
||||
sub dx,cx
|
||||
popf
|
||||
pop di si cx
|
||||
ret
|
||||
|
||||
|
||||
;Insert une chaine ds:si en es:di a partir du caractŠre cx
|
||||
insert0:
|
||||
push cx di si
|
||||
add di,cx
|
||||
call getlength0
|
||||
push si di ds
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
add di,cx
|
||||
call copy20
|
||||
pop ds di si
|
||||
cld
|
||||
inc di
|
||||
rep movsb
|
||||
pop si di cx
|
||||
ret
|
||||
|
||||
;Detruit CX caractŠres a partir du caractŠre BX de DS:SI
|
||||
delete0:
|
||||
push cx dx si di es
|
||||
push ds
|
||||
pop es
|
||||
mov dx,cx
|
||||
call getlength0
|
||||
sub cx,dx
|
||||
sub cx,bx
|
||||
inc cx
|
||||
add si,bx
|
||||
mov di,si
|
||||
add si,dx
|
||||
cld
|
||||
rep movsb
|
||||
pop es di si dx cx
|
||||
ret
|
||||
|
||||
;Copie une chaine de ds:si en es:di
|
||||
Copy0:
|
||||
push ax cx si di
|
||||
call GetLength0
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;Copie une chaine de ds:si en es:di
|
||||
Copy20:
|
||||
push ax cx si di
|
||||
call GetLength0
|
||||
cld
|
||||
add si,cx
|
||||
add di,cx
|
||||
inc cx
|
||||
std
|
||||
rep movsb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;ConcatŠne le chaine ds:si avec es:di
|
||||
Concat0:
|
||||
push ax cx dx si di
|
||||
call GetLength0
|
||||
mov dx,cx
|
||||
xchg si,di
|
||||
push ds
|
||||
push es
|
||||
pop ds
|
||||
call GetLength0
|
||||
pop ds
|
||||
xchg si,di
|
||||
add di,cx
|
||||
mov cx,dx
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si dx cx ax
|
||||
ret
|
||||
|
||||
;Met DL comme d‚limiteur par d‚faut
|
||||
SetDelimiter0:
|
||||
mov cs:delim,dl
|
||||
ret
|
||||
|
||||
;Renvoie le d‚limiteur par d‚faut dans dl
|
||||
GetDelimiter0:
|
||||
mov dl,cs:delim
|
||||
ret
|
||||
delim db 0
|
||||
|
||||
;D‚truit les d‚limiteur qui sont cons‚cutifs dans ds:si
|
||||
CompressDelimiter0:
|
||||
push ax dx si di es
|
||||
call Getlength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,cs:delim
|
||||
xor dx,dx
|
||||
Compressitems:
|
||||
repne scasb
|
||||
inc dx
|
||||
againcomp:
|
||||
cmp [di],al
|
||||
jne nosup
|
||||
mov si,di
|
||||
mov bx,0
|
||||
push cx
|
||||
mov cx,1
|
||||
call delete0
|
||||
pop cx
|
||||
jmp againcomp
|
||||
nosup:
|
||||
cmp cx,0
|
||||
jne compressitems
|
||||
mov cx,dx
|
||||
pop es di si dx ax
|
||||
ret
|
||||
|
||||
;Met le nombre d'‚l‚ments … cx
|
||||
Setnbitems0:
|
||||
push ax cx dx di es
|
||||
mov dx,cx
|
||||
call Getnbitems0
|
||||
cmp cx,dx
|
||||
je noadjust
|
||||
ja subsome
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
sub cx,dx
|
||||
neg cx
|
||||
push cx
|
||||
call getlength0
|
||||
add di,cx
|
||||
pop cx
|
||||
mov al,cs:delim
|
||||
mov ah,'a'
|
||||
rep stosw
|
||||
mov al,0
|
||||
stosb
|
||||
jmp noadjust
|
||||
subsome:
|
||||
mov cx,dx
|
||||
call GetPointeritem0
|
||||
dec di
|
||||
mov byte ptr [di],0
|
||||
noadjust:
|
||||
pop es di dx cx
|
||||
ret
|
||||
|
||||
;Renvoie la taille dx de l'‚l‚ment cx
|
||||
Getitemsize:
|
||||
push cx di
|
||||
call getpointeritem0
|
||||
mov dx,di
|
||||
inc cx
|
||||
call getpointeritem0
|
||||
sub dx,di
|
||||
neg dx
|
||||
dec dx
|
||||
pop di cx
|
||||
ret
|
||||
|
||||
;Renvoie en es:di l'‚l‚ment cx de ds:si
|
||||
Getitem0:
|
||||
push si di cx ax
|
||||
push di
|
||||
call getPointeritem0
|
||||
call getitemsize
|
||||
mov si,di
|
||||
pop di
|
||||
mov cx,dx
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop ax cx di si
|
||||
ret
|
||||
|
||||
;renvoi un pointeur di sur l'‚l‚ment cx de ds:si
|
||||
GetPointeritem0:
|
||||
push ax bx cx dx es
|
||||
mov bx,cx
|
||||
call Getlength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,cs:delim
|
||||
xor dx,dx
|
||||
Countnbitems:
|
||||
cmp bx,dx
|
||||
je finishpointer
|
||||
repne scasb
|
||||
inc dx
|
||||
cmp cx,0
|
||||
jne countnbitems
|
||||
inc di
|
||||
finishpointer:
|
||||
pop es dx cx bx ax
|
||||
ret
|
||||
|
||||
;Renvoie le nombre d'‚l‚ments cx de ds:si
|
||||
GetNbitems0:
|
||||
push ax dx di es
|
||||
call Getlength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,cs:delim
|
||||
xor dx,dx
|
||||
Countitems:
|
||||
repne scasb
|
||||
inc dx
|
||||
cmp cx,0
|
||||
jne countitems
|
||||
mov cx,dx
|
||||
pop es di dx ax
|
||||
ret
|
||||
|
||||
;renvoie la taille en octets CX de la chaine point‚e en ds:si
|
||||
GetLength0:
|
||||
push ax di es
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,0
|
||||
mov cx,0FFFFh
|
||||
cld
|
||||
repne scasb
|
||||
neg cx
|
||||
dec cx
|
||||
dec cx
|
||||
pop es di ax
|
||||
ret
|
||||
|
||||
;Met la taille en octets de la chaine point‚e ds:si a CX
|
||||
SetLength0:
|
||||
push bx
|
||||
mov bx,cx
|
||||
mov byte ptr [si+bx],0
|
||||
pop bx
|
||||
ret
|
||||
|
||||
;met en majuscule la chaine ds:si
|
||||
UpperCase0:
|
||||
push si ax
|
||||
UpperCase:
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je EndUpperCase
|
||||
cmp al,'a'
|
||||
jb UpperCase
|
||||
cmp al,'z'
|
||||
ja UpperCase
|
||||
sub byte ptr [si-1],'a'-'A'
|
||||
jmp UpperCase
|
||||
EndUpperCase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
;met en majuscule la premiŠre lettre chaine ds:si
|
||||
OneCase0:
|
||||
push ax
|
||||
OneUpperCase:
|
||||
mov al,ds:[si]
|
||||
cmp al,'a'
|
||||
jb OneEndUpperCase
|
||||
cmp al,'z'
|
||||
ja OneEndUpperCase
|
||||
sub byte ptr [si],'a'-'A'
|
||||
OneEndUpperCase:
|
||||
clc
|
||||
pop ax
|
||||
ret
|
||||
|
||||
;met en minuscule la chaine ds:si
|
||||
LowerCase0:
|
||||
push si ax
|
||||
LowerCase:
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je EndLowerCase
|
||||
cmp al,'A'
|
||||
jb LowerCase
|
||||
cmp al,'Z'
|
||||
ja LowerCase
|
||||
add byte ptr [si-1],'a'-'A'
|
||||
jmp LowerCase
|
||||
EndLowerCase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
;Inverse la casse la chaine ds:si
|
||||
InvertCase0:
|
||||
push si ax
|
||||
InvertCase:
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je EndInvertCase
|
||||
cmp al,'A'
|
||||
jb InvertCase
|
||||
cmp al,'Z'
|
||||
jbe GoInvertCase
|
||||
cmp al,'a'
|
||||
jb InvertCase
|
||||
cmp al,'z'
|
||||
ja InvertCase
|
||||
sub byte ptr [si-1],'a'-'A'
|
||||
jmp InvertCase
|
||||
GoInvertCase:
|
||||
add byte ptr [si-1],'a'-'A'
|
||||
jmp InvertCase
|
||||
EndInvertCase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
end start
|
|
@ -1,81 +0,0 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
|
||||
jmp tsr
|
||||
offsets dd 0
|
||||
db 'HOURS'
|
||||
tsr:
|
||||
pushf
|
||||
db 2eh,0ffh,1eh
|
||||
dw offsets
|
||||
cli
|
||||
pusha
|
||||
push ds es
|
||||
push cs
|
||||
push cs
|
||||
pop ds
|
||||
pop es
|
||||
mov ah,22h
|
||||
mov di,offset infos
|
||||
int 47h
|
||||
mov bl,[infos+1]
|
||||
xor bh,bh
|
||||
sub bl,8
|
||||
mov di,bx
|
||||
shl di,1
|
||||
mov dx,71h
|
||||
xor eax,eax
|
||||
mov cx,0B800h
|
||||
mov es,cx
|
||||
mov cl,4
|
||||
mov bp,8
|
||||
show:
|
||||
dec dx
|
||||
mov al,cl
|
||||
out dx,al
|
||||
inc dx
|
||||
in al,dx
|
||||
call showbcd
|
||||
cmp cl,0
|
||||
je finic
|
||||
mov byte ptr es:[di],':'
|
||||
add di,2
|
||||
sub cl,2
|
||||
jmp show
|
||||
finic:
|
||||
pop es ds
|
||||
popa
|
||||
sti
|
||||
iret
|
||||
|
||||
|
||||
;==============================Affiche le nombre nb hexa en EDX==============
|
||||
Showbcd:
|
||||
push ax bx cx edx
|
||||
mov edx,eax
|
||||
mov cx,bp
|
||||
sub cx,32
|
||||
neg cx
|
||||
shl edx,cl
|
||||
mov ax,bp
|
||||
shr ax,2
|
||||
bcdaize:
|
||||
rol edx,4
|
||||
mov bx,dx
|
||||
and bx,0fh
|
||||
add bl,'0'
|
||||
mov es:[di],bl
|
||||
add di,2
|
||||
dec al
|
||||
jnz bcdaize
|
||||
pop edx cx bx ax
|
||||
ret
|
||||
infos db 40 dup (0)
|
||||
|
||||
end start
|
|
@ -1,32 +0,0 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
|
||||
jmp tsr
|
||||
offsets dd 0
|
||||
db 'TIMER'
|
||||
tsr:
|
||||
pushf
|
||||
db 2eh,0ffh,1eh
|
||||
dw offsets
|
||||
cli
|
||||
push ax bx es
|
||||
mov bx,cs:compteur
|
||||
inc bx
|
||||
and bx,11b
|
||||
mov cs:compteur,bx
|
||||
mov bx,cs:[offset fig+bx]
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov es:[0],bl
|
||||
pop es bx ax
|
||||
sti
|
||||
iret
|
||||
compteur dw 0
|
||||
fig db 'Ä\³/'
|
||||
end start
|
|
@ -1,298 +0,0 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0h
|
||||
start:
|
||||
jmp tsr
|
||||
drv db 'JOYSTICK',0
|
||||
Tsr:
|
||||
cli
|
||||
cmp ax,1234h
|
||||
jne nomore
|
||||
mov ax,4321h
|
||||
jmp itsok
|
||||
nomore:
|
||||
push bx
|
||||
cmp byte ptr cs:isact,1
|
||||
je nottest
|
||||
mov cs:isact,1
|
||||
jmp react
|
||||
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:
|
||||
mov cs:isact,0
|
||||
sti
|
||||
iret
|
||||
nottest:
|
||||
pop bx
|
||||
jmp endofint
|
||||
current dw 0
|
||||
tables dw 0;detectjoystick
|
||||
;dw getjoystick
|
||||
;dw getjoystickscreen
|
||||
;dw configjoystick
|
||||
isact db 0
|
||||
|
||||
;envoie en bx,cx les coordonn‚es et en dl les boutons
|
||||
getjoystick:
|
||||
push ax cx
|
||||
mov bx,cs:rx
|
||||
mov cx,cs:ry
|
||||
mov al,cs:button
|
||||
not al
|
||||
mov cl,4
|
||||
shr al,cl
|
||||
mov dl,al
|
||||
pop cx ax
|
||||
ret
|
||||
|
||||
;envoie en di les coordonn‚es ecran et en dl les boutons
|
||||
getjoystickscreen:
|
||||
push ax cx
|
||||
mov di,cs:xy
|
||||
mov al,cs:button
|
||||
not al
|
||||
mov cl,4
|
||||
shr al,cl
|
||||
mov dl,al
|
||||
pop cx ax
|
||||
ret
|
||||
db 'button'
|
||||
Button db 0
|
||||
db 'rx'
|
||||
rx dw 0
|
||||
db 'ry'
|
||||
ry dw 0
|
||||
db 'vx'
|
||||
VX db 0
|
||||
db 'vy'
|
||||
VY db 0
|
||||
db 'x'
|
||||
X dw 7FFFh
|
||||
db 'y'
|
||||
Y dw 7FFFh
|
||||
speed db 6
|
||||
spherex db 0
|
||||
spherey db 0
|
||||
db 'count'
|
||||
count db 0
|
||||
db 'error'
|
||||
error db 0
|
||||
xy dw 0
|
||||
old db 0
|
||||
|
||||
calibrate db 0
|
||||
db 'ticks'
|
||||
ticks dw 0
|
||||
db 'state'
|
||||
state db 0
|
||||
db 'connard'
|
||||
connard db 1
|
||||
connard2 db 1
|
||||
;Gestionnaire de joystick
|
||||
react:
|
||||
push ax bx cx dx si di bp ds es
|
||||
push cs
|
||||
pop ds
|
||||
mov dx,201h
|
||||
cmp error, 1
|
||||
je gest1
|
||||
cmp count,1
|
||||
je gest1
|
||||
cmp count,2
|
||||
je gest2
|
||||
gest1:
|
||||
mov error,0
|
||||
mov count,2
|
||||
call getticks
|
||||
mov ticks,ax
|
||||
out dx,al
|
||||
in al,dx
|
||||
and al,00000011b
|
||||
mov state,al
|
||||
jmp endgest
|
||||
gest2:
|
||||
not connard
|
||||
call getticks
|
||||
sub ax,ticks
|
||||
cmp ax,1FF0h
|
||||
jb nofinish
|
||||
mov error,1
|
||||
jmp endgest
|
||||
nofinish:
|
||||
mov bx,ax
|
||||
in al,dx
|
||||
and al,00000011b
|
||||
cmp state,al
|
||||
je endgest
|
||||
xchg state,al
|
||||
xor al,state
|
||||
mov cl,4
|
||||
or bx,bx
|
||||
js noadj
|
||||
shr bx,cl
|
||||
noadj:
|
||||
test al,1
|
||||
je isy
|
||||
mov VX,bl
|
||||
jmp wasx
|
||||
isy:
|
||||
test al,2
|
||||
je endgest
|
||||
mov VY,bl
|
||||
wasx:
|
||||
mov connard2,0fh
|
||||
mov count,1
|
||||
endgest:
|
||||
in al,dx
|
||||
not al
|
||||
mov cl,4
|
||||
shr al,cl
|
||||
mov button,al
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
mov cl,speed
|
||||
movsx bx,VY
|
||||
shl bx,cl
|
||||
cmp spherey,0
|
||||
jne nolimity
|
||||
xor ah,ah
|
||||
mov al,[di]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text4
|
||||
shl ax,3
|
||||
text4:
|
||||
dec ax
|
||||
cmp bx,0
|
||||
jg decy
|
||||
cmp ry,ax
|
||||
jae noaddy
|
||||
jmp nolimity
|
||||
decy:
|
||||
cmp ry,0
|
||||
je noaddy
|
||||
nolimity:
|
||||
sub y,bx
|
||||
noaddy:
|
||||
movsx bx,VX
|
||||
shl bx,cl
|
||||
cmp spherex,0
|
||||
jne nolimitx
|
||||
xor ah,ah
|
||||
mov al,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text5
|
||||
shl ax,3
|
||||
text5:
|
||||
dec ax
|
||||
cmp bx,0
|
||||
jl decx
|
||||
cmp rx,ax
|
||||
jae noaddx
|
||||
jmp nolimitx
|
||||
decx:
|
||||
cmp rx,0
|
||||
je noaddx
|
||||
nolimitx:
|
||||
add x,bx
|
||||
noaddx:
|
||||
mov ax,x
|
||||
mov bx,0FFFFh
|
||||
xor ch,ch
|
||||
mov cl,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text1
|
||||
shl cx,3
|
||||
text1:
|
||||
mul cx
|
||||
div bx
|
||||
mov rx,ax
|
||||
mov ax,y
|
||||
xor ch,ch
|
||||
mov cl,[di]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text2
|
||||
shl cx,3
|
||||
text2:
|
||||
mul cx
|
||||
div bx
|
||||
mov ry,ax
|
||||
xor ch,ch
|
||||
mov cl,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text3
|
||||
shl cx,3
|
||||
text3:
|
||||
mul cx
|
||||
add ax,rx
|
||||
cmp byte ptr [di+7],4
|
||||
mov di,ax
|
||||
jbe textpoint
|
||||
mov ax,0A000h
|
||||
mov es,ax
|
||||
jmp graphpoint
|
||||
textpoint:
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
shl di,1
|
||||
inc di
|
||||
graphpoint:
|
||||
mov bx,xy
|
||||
cmp byte ptr es:[bx],070h
|
||||
jne waschanged
|
||||
mov al,old
|
||||
mov byte ptr es:[bx],al
|
||||
waschanged:
|
||||
mov xy,di
|
||||
mov al,es:[di]
|
||||
mov old,al
|
||||
mov byte ptr es:[di],070h
|
||||
mov al, 20h
|
||||
out 0a0h, al
|
||||
out 20h, al
|
||||
errormouse:
|
||||
pop es ds bp di si dx cx bx ax
|
||||
mov cs:isact,0
|
||||
pop bx
|
||||
iret
|
||||
infos db 40 dup (0)
|
||||
|
||||
|
||||
getticks:
|
||||
mov al,0
|
||||
out 43h,al
|
||||
jmp wait1
|
||||
wait1:
|
||||
in al,40h
|
||||
mov ah,al
|
||||
jmp wait2
|
||||
wait2:
|
||||
in al,40h
|
||||
xchg ah,al
|
||||
ret
|
||||
|
||||
end start
|
200
noyau/mcb.asm
|
@ -1,52 +1,4 @@
|
|||
|
||||
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
|
||||
|
@ -97,34 +49,85 @@ PROC biosprint FAR
|
|||
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 ;
|
||||
PROC enablea20 FAR
|
||||
USES ax
|
||||
mov al,0d1h
|
||||
out 64h,al
|
||||
call a20wait
|
||||
mov al,0dfh
|
||||
out 60h,al
|
||||
call a20wait
|
||||
;mov al,0ffh
|
||||
;out 64h,al
|
||||
;call a20wait
|
||||
ret
|
||||
endp enablea20
|
||||
|
||||
;@@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
|
||||
PROC disablea20 FAR
|
||||
USES ax
|
||||
mov al,0d1h
|
||||
out 64h,al
|
||||
call a20wait
|
||||
mov al,0DDh
|
||||
out 60h,al
|
||||
call a20wait
|
||||
;mov al,0ffh
|
||||
;out 64h,al
|
||||
;call a20wait
|
||||
ret
|
||||
endp disablea20
|
||||
|
||||
a20wait:
|
||||
in al,64h
|
||||
jmp @@suite
|
||||
@@suite:
|
||||
and al,2
|
||||
jnz a20wait
|
||||
ret
|
||||
;par le system control port A
|
||||
;in al,92h
|
||||
;or al,2
|
||||
;out 92h,al
|
||||
|
||||
;par le system control port A
|
||||
;in al,92h
|
||||
;and al,not 2
|
||||
;out 92h,al
|
||||
|
||||
PROC flatmode FAR
|
||||
USES eax,bx,ds
|
||||
push cs
|
||||
pop ds
|
||||
; first, calculate the linear address of GDT
|
||||
xor eax,eax
|
||||
mov ax,ds
|
||||
shl eax,4
|
||||
add [dword ptr offset @@gdt+2],eax ; store as GDT linear base addr
|
||||
; now load the GDT into the GDTR
|
||||
lgdt [fword ptr offset @@gdt] ; load GDT base
|
||||
mov bx,1 * size descriptor ; point to first descriptor
|
||||
cli ; turn off interrupts
|
||||
mov eax,cr0 ; prepare to enter protected mode
|
||||
or al,1 ; flip the PE bit
|
||||
mov cr0,eax ; we're now in protected mode
|
||||
jmp @@suite
|
||||
@@suite:
|
||||
mov fs,bx ; load the FS segment register
|
||||
and al,0FEh ; clear the PE bit again
|
||||
mov cr0,eax ; back to real mode
|
||||
jmp @@suite2
|
||||
@@suite2:
|
||||
sti ; resume handling interrupts
|
||||
ret ;
|
||||
|
||||
@@gdt descriptor <offset @@gdtend - offset @@gdt - 1, offset @@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
|
||||
USES ax
|
||||
xor ax,ax
|
||||
int 16h
|
||||
ret
|
||||
|
@ -139,8 +142,6 @@ PROC mbloadsection FAR
|
|||
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"
|
||||
|
@ -148,11 +149,16 @@ PROC mbloadsection FAR
|
|||
lea si,[@@toresov]
|
||||
mov [word ptr ss:si],0FFFFh
|
||||
mov bx,[ds:exe.sections]
|
||||
cmp bx,0
|
||||
je @@finishloading
|
||||
@@loading:
|
||||
cmp [dword ptr bx],0
|
||||
je @@finishloading
|
||||
mov ax,bx
|
||||
add ax,4
|
||||
pushad
|
||||
call biosprint,ax
|
||||
popad
|
||||
call mbcreate,ax,[word ptr bx+2]
|
||||
jc @@error
|
||||
inc si
|
||||
|
@ -174,11 +180,6 @@ PROC mbloadsection FAR
|
|||
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]
|
||||
|
@ -229,7 +230,16 @@ PROC mbcreate FAR
|
|||
ARG @blocks:word,@size:word
|
||||
USES bx,cx,dx,si,di,ds,es
|
||||
push gs
|
||||
mov gs,[ss:bp+4]
|
||||
mov ax,[ss:bp+4]
|
||||
mov dx,ax
|
||||
dec dx
|
||||
dec dx
|
||||
mov gs,dx
|
||||
cmp [word ptr gs:0x0],'NH'
|
||||
je @@oktoset
|
||||
mov ax,memorystart
|
||||
@@oktoset:
|
||||
mov gs,ax
|
||||
mov cx,[@size]
|
||||
shr cx,4
|
||||
inc cx
|
||||
|
@ -250,15 +260,13 @@ PROC mbcreate FAR
|
|||
mov ax,[es:mb.sizes]
|
||||
cmp cx,ax
|
||||
ja @@notsogood
|
||||
;mov [word ptr es:mb.check],"NH"
|
||||
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
|
||||
|
@ -276,14 +284,16 @@ PROC mbcreate FAR
|
|||
mov si,offset afree
|
||||
xor di,di
|
||||
mov cx,size mb
|
||||
push cs
|
||||
pop ds
|
||||
cld
|
||||
rep movsb
|
||||
mov [es:mb.isnotlast],dl
|
||||
mov [es:mb.sizes],ax
|
||||
@@nofree:
|
||||
mov ax,bx
|
||||
clc
|
||||
pop gs
|
||||
clc
|
||||
ret
|
||||
@@notsogood:
|
||||
inc bx
|
||||
|
@ -291,8 +301,8 @@ PROC mbcreate FAR
|
|||
add bx,[es:mb.sizes]
|
||||
jmp @@searchfree
|
||||
@@memoryerror:
|
||||
stc
|
||||
pop gs
|
||||
stc
|
||||
ret
|
||||
@@notenougtmem:
|
||||
pop gs
|
||||
|
@ -339,6 +349,8 @@ PROC mbfree FAR
|
|||
jne @@nottofree
|
||||
mov [es:mb.isresident],false
|
||||
mov [es:mb.reference],free
|
||||
mov si,offset @@isfree
|
||||
lea di,[es:mb.names]
|
||||
mov cx,6
|
||||
cld
|
||||
rep movsb
|
||||
|
@ -477,7 +489,7 @@ endp mbchown
|
|||
;Alloue un bloc /data de CX caractere pour le process appelant -> ax
|
||||
PROC mballoc FAR
|
||||
ARG @size:word
|
||||
USES ax,si,ds
|
||||
USES si,ds
|
||||
push cs
|
||||
pop ds
|
||||
call mbcreate,offset @@data,[@size]
|
||||
|
@ -532,9 +544,9 @@ PROC mbfind FAR
|
|||
dec bx
|
||||
dec bx
|
||||
mov si,[@blocks]
|
||||
lea di,[es:mb.names]
|
||||
@@search:
|
||||
mov es,bx
|
||||
lea di,[es:mb.names]
|
||||
cmp [word ptr es:mb.check],"NH"
|
||||
jne @@memoryerror
|
||||
inc bx
|
||||
|
@ -639,14 +651,20 @@ PROC mbloadfuncs FAR
|
|||
call mbsearchfunc,si
|
||||
jnc @@toendoftext
|
||||
mov bx,si
|
||||
;pushad
|
||||
;call biosprint,si
|
||||
;popad
|
||||
@@findend:
|
||||
inc bx
|
||||
cmp [byte ptr bx], ':'
|
||||
jne @@findend
|
||||
mov [byte ptr bx],0
|
||||
;call projectfile,bx
|
||||
call [cs:projfile],si
|
||||
jc @@erroronload
|
||||
mov [byte ptr bx],':'
|
||||
;pushad
|
||||
;call biosprint,si
|
||||
;popad
|
||||
call mbsearchfunc,si
|
||||
jc @@libnotexist
|
||||
@@toendoftext:
|
||||
|
@ -676,18 +694,18 @@ PROC mbloadfuncs FAR
|
|||
endp mbloadfuncs
|
||||
|
||||
|
||||
;Recherche une fonction pointé par DS:SI en mémoire et renvoie son adresse en DX:AX
|
||||
;Recherche une fonction pointé par DS:%0 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
|
||||
mov si,bx
|
||||
@@findend:
|
||||
inc bx
|
||||
cmp [byte ptr bx], ':'
|
||||
jne @@findend
|
||||
mov [byte ptr bx],0
|
||||
call mbfind
|
||||
call mbfind,si
|
||||
mov [byte ptr bx],':'
|
||||
jc @@notfoundattallthesb
|
||||
mov es,ax
|
||||
|
|
699
noyau/port.asm
|
@ -1,699 +0,0 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0h
|
||||
start:
|
||||
jmp tsr
|
||||
drv db 'LPT ',0
|
||||
Tsr:
|
||||
cli
|
||||
cmp ax,1234h
|
||||
jne nomore
|
||||
mov ax,4321h
|
||||
jmp itsok
|
||||
nomore:
|
||||
push bx ax
|
||||
mov ah,4
|
||||
mov bh,1
|
||||
int 50h
|
||||
mov bl,al
|
||||
pop ax
|
||||
cmp byte ptr cs:isact,1
|
||||
je nottest
|
||||
mov cs:isact,1
|
||||
cmp bl,80h
|
||||
jae react
|
||||
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:
|
||||
mov cs:isact,0
|
||||
sti
|
||||
iret
|
||||
nottest:
|
||||
pop bx
|
||||
jmp endofint
|
||||
current dw 0
|
||||
tables dw getlptin
|
||||
dw getlptout
|
||||
dw getlptinout
|
||||
dw setlptin
|
||||
dw setlptout
|
||||
dw setlptinout
|
||||
dw getlpt
|
||||
dw getfirstlpt
|
||||
dw setemettor
|
||||
dw setreceptor
|
||||
dw settimeout
|
||||
dw gettimeout
|
||||
dw receivelpt
|
||||
dw sendlpt
|
||||
dw receivelptblock
|
||||
dw sendlptblock
|
||||
dw receivecommand
|
||||
dw sendcommand
|
||||
|
||||
react:
|
||||
push ds es
|
||||
mov cs:isact,1
|
||||
pushad
|
||||
push cs
|
||||
pop ds
|
||||
push cs
|
||||
pop es
|
||||
cmp byte ptr never,1
|
||||
je oknever
|
||||
mov bl,[drv+3]
|
||||
sub bl,'0'
|
||||
xor bh,bh
|
||||
call getlpt
|
||||
dec bl
|
||||
shl bl,1
|
||||
mov al,7
|
||||
sub al,bl
|
||||
mov ah,40
|
||||
mov di,offset video
|
||||
int 47h
|
||||
push ax
|
||||
mov ah,01h
|
||||
int 50h
|
||||
mov ah,21
|
||||
mov cl,4
|
||||
int 47h
|
||||
sti
|
||||
mov al,0111b
|
||||
call setlptout
|
||||
call setreceptor
|
||||
call initlpt
|
||||
jc errorie
|
||||
mov cx,0
|
||||
mov ah,20
|
||||
mov bx,1012h
|
||||
mov si,offset initok
|
||||
int 47h
|
||||
cmp byte ptr always,1
|
||||
je yes
|
||||
mov ah,20
|
||||
mov bx,1010h
|
||||
mov si,offset mdd
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset drv
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,20
|
||||
mov bx,1011h
|
||||
mov si,offset msg
|
||||
int 47h
|
||||
waitkey:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp al,'n'
|
||||
je no
|
||||
cmp al,'N'
|
||||
je no
|
||||
cmp al,'Y'
|
||||
je yes
|
||||
cmp al,'y'
|
||||
je yes
|
||||
cmp al,'e'
|
||||
je nev
|
||||
cmp al,'E'
|
||||
je nev
|
||||
cmp al,'a'
|
||||
je alw
|
||||
cmp al,'A'
|
||||
je alw
|
||||
jmp waitkey
|
||||
yes:
|
||||
call receivecommand
|
||||
jc errortimeout
|
||||
no:
|
||||
mov al,0111b
|
||||
call setlptout
|
||||
cli
|
||||
mov ah,41
|
||||
mov si,offset video
|
||||
int 47h
|
||||
pop ax
|
||||
mov ah,00h
|
||||
int 50h
|
||||
mov ah,09h
|
||||
int 50h
|
||||
oknever:
|
||||
popad
|
||||
pop es ds
|
||||
mov cs:isact,0
|
||||
pop bx
|
||||
jmp endofint
|
||||
errorie:
|
||||
mov si,offset inits
|
||||
jmp show
|
||||
errortimeout:
|
||||
mov si,offset timeouts
|
||||
show:
|
||||
mov ah,20
|
||||
mov bx,1012h
|
||||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
jmp no
|
||||
nev:
|
||||
mov byte ptr never,1
|
||||
jmp no
|
||||
alw:
|
||||
mov byte ptr always,1
|
||||
jmp yes
|
||||
initok db 'Initialisation is realised !',0
|
||||
inits db 'Error on initialisation',0
|
||||
timeouts db 'Connection lost or timeout complete !!',0
|
||||
mdd db 'Connection demand on ',0
|
||||
msg db 'Accept connection ? (Y)es (N)o n(E)ver (A)lways',0
|
||||
isact db 0
|
||||
always db 0
|
||||
never db 0
|
||||
|
||||
;envois une commande al
|
||||
sendcommand:
|
||||
push ax bx cx di
|
||||
mov bl,al
|
||||
xor bh,bh
|
||||
shl bx,1
|
||||
add bx,offset cmde
|
||||
call cs:[bx]
|
||||
pop di cx bx ax
|
||||
ret
|
||||
cmde dw nothing
|
||||
dw getram
|
||||
|
||||
;recupŠre la ram en ds:si de cx distant caractŠres en es:di local
|
||||
getram:
|
||||
push ax bx cx ds
|
||||
mov bx,offset command
|
||||
mov cs:[bx+2],ds
|
||||
mov cs:[bx],si
|
||||
mov cs:[bx+4],cx
|
||||
push cs
|
||||
pop ds
|
||||
mov si,bx
|
||||
mov cx,6
|
||||
call sendlptblock
|
||||
jc endofget
|
||||
call receivelptblock
|
||||
endofget:
|
||||
pop ds cx bx ax
|
||||
ret
|
||||
|
||||
;Re‡ois une commande et l'execute
|
||||
Receivecommand:
|
||||
push ax bx cx di ds es
|
||||
push cs
|
||||
pop es
|
||||
push cs
|
||||
pop ds
|
||||
mov di,offset command
|
||||
call receivelptblock
|
||||
jc endofno
|
||||
mov bl,al
|
||||
xor bh,bh
|
||||
shl bx,1
|
||||
add bx,offset cmd
|
||||
call cs:[bx]
|
||||
clc
|
||||
endofno:
|
||||
pop es ds di cx bx ax
|
||||
ret
|
||||
|
||||
command db 25 dup (0)
|
||||
cmd dw nothings
|
||||
dw sendram
|
||||
dw receiveram
|
||||
dw sendreg
|
||||
dw receivereg
|
||||
dw sendport
|
||||
dw receiveport
|
||||
dw letexecute
|
||||
nothings:
|
||||
ret
|
||||
|
||||
letexecute:
|
||||
push ds es fs gs
|
||||
pushad
|
||||
push cs
|
||||
push offset suite
|
||||
mov ax,es:[di+2]
|
||||
mov ds,ax
|
||||
mov es,ax
|
||||
mov fs,ax
|
||||
mov gs,ax
|
||||
push ax
|
||||
mov ax,es:[di]
|
||||
push ax
|
||||
DB 0CBh
|
||||
suite:
|
||||
popad
|
||||
pop gs fs es ds
|
||||
ret
|
||||
|
||||
Sendram:
|
||||
push ax cx si ds
|
||||
mov si,es:[di]
|
||||
mov ax,es:[di+2]
|
||||
mov ds,ax
|
||||
mov cx,es:[di+4]
|
||||
call sendlptblock
|
||||
pop ds si cx ax
|
||||
ret
|
||||
|
||||
receiveram:
|
||||
sendreg:
|
||||
receivereg:
|
||||
|
||||
sendport:
|
||||
push ax cx dx si
|
||||
mov dx,es:[di]
|
||||
in ax,dx
|
||||
mov cx,2
|
||||
mov si,offset tempblock
|
||||
mov ds:[si],ax
|
||||
call sendlptblock
|
||||
pop si dx cx ax
|
||||
ret
|
||||
|
||||
receiveport:
|
||||
push ax dx
|
||||
mov dx,es:[di]
|
||||
mov ax,es:[di+2]
|
||||
out dx,ax
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
tempblock db 25 dup (0)
|
||||
|
||||
;---------Segment Adress-----------
|
||||
Bios equ 040h
|
||||
;---------Offset Adress------------
|
||||
Lptadr equ 008h
|
||||
Timer equ 06Ch
|
||||
;---------Constant-----------------
|
||||
onesec equ 18
|
||||
tensec equ 182
|
||||
Ack equ 00
|
||||
Nack equ 0FFh
|
||||
maxtry equ 10
|
||||
|
||||
Initlpt:
|
||||
push ax ecx
|
||||
call StartTimer
|
||||
cmp cs:emettor,0
|
||||
je receptinit
|
||||
mov al,10000b
|
||||
call SetLptOut
|
||||
waitinit1:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorinit
|
||||
call getlptIn
|
||||
cmp al,00000b
|
||||
jnz waitinit1
|
||||
jmp endinit
|
||||
receptinit:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorinit
|
||||
call getlptIn
|
||||
cmp al,00000b
|
||||
jnz receptinit
|
||||
mov al,10000b
|
||||
call SetLptOut
|
||||
endinit:
|
||||
clc
|
||||
pop ecx ax
|
||||
ret
|
||||
errorinit:
|
||||
stc
|
||||
pop ecx ax
|
||||
ret
|
||||
|
||||
|
||||
;-Envoie DL (dh) JNE si problŠme JNC error timeout
|
||||
Sendlpt:
|
||||
push ax bx ecx
|
||||
call StartTimer
|
||||
mov dh,dl
|
||||
mov al,dl
|
||||
and al,0Fh
|
||||
call SetLptOut
|
||||
waitSend:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorsend
|
||||
call getlptIn
|
||||
bt ax,4
|
||||
jnc waitsend
|
||||
and al,0Fh
|
||||
mov bl,al
|
||||
call StartTimer ;/////
|
||||
mov al,dh
|
||||
shr al,4
|
||||
or al,10000b
|
||||
call SetLptOut
|
||||
waitSend2:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorsend
|
||||
call getlptIn
|
||||
bt ax,4
|
||||
jc waitsend2
|
||||
and al,0Fh
|
||||
shl al,4
|
||||
add bl,al
|
||||
cmp dl,bl
|
||||
pop ecx bx ax
|
||||
clc
|
||||
ret
|
||||
errorsend:
|
||||
pop ecx bx ax
|
||||
stc
|
||||
ret
|
||||
|
||||
|
||||
;-Re‡ois DL (dh)
|
||||
Receivelpt:
|
||||
push ax bx ecx
|
||||
call StartTimer
|
||||
waitreceive:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorreceive
|
||||
call getlptIn
|
||||
bt ax,4
|
||||
jnc waitreceive
|
||||
and al,0Fh
|
||||
mov dl,al
|
||||
call SetLptOut
|
||||
call StartTimer ;/////
|
||||
waitreceive2:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorreceive
|
||||
call getlptIn
|
||||
bt ax,4
|
||||
jc waitreceive2
|
||||
and al,0Fh
|
||||
mov dh,al
|
||||
shl dh,4
|
||||
add dl,dh
|
||||
or al,10000b
|
||||
call SetlptOut
|
||||
clc
|
||||
pop ecx bx ax
|
||||
ret
|
||||
errorreceive:
|
||||
stc
|
||||
pop ecx bx ax
|
||||
ret
|
||||
|
||||
;-AX
|
||||
SetTimeout:
|
||||
mov cs:Timeout,dx
|
||||
ret
|
||||
|
||||
timeout dw tensec
|
||||
|
||||
getTimeout:
|
||||
mov dx,cs:Timeout
|
||||
ret
|
||||
|
||||
SetEmettor:
|
||||
mov cs:Emettor,1
|
||||
ret
|
||||
|
||||
Emettor db 0
|
||||
|
||||
SetReceptor:
|
||||
mov cs:Emettor,0
|
||||
ret
|
||||
|
||||
;->bx Nøport->Adresse dx
|
||||
GetLpt:
|
||||
push ax bx ds
|
||||
mov ax,bios
|
||||
mov ds,ax
|
||||
dec bx
|
||||
shl bx,1
|
||||
mov dx,ds:[Lptadr+bx]
|
||||
mov cs:lpt,dx
|
||||
pop ds bx ax
|
||||
ret
|
||||
lpt dw 0
|
||||
|
||||
;->bx Nøport->Adresse dx
|
||||
GetFirstLpt:
|
||||
push ax ds
|
||||
mov ax,bios
|
||||
mov ds,ax
|
||||
xor bx,bx
|
||||
findlpt:
|
||||
mov dx,ds:[Lptadr+bx]
|
||||
cmp dx,0
|
||||
jne oklpt
|
||||
add bx,2
|
||||
cmp bx,4
|
||||
jbe findlpt
|
||||
oklpt:
|
||||
mov cs:lpt,dx
|
||||
pop ds ax
|
||||
ret
|
||||
|
||||
;->
|
||||
StartTimer:
|
||||
push ax ecx ds
|
||||
mov ax,Bios
|
||||
mov ds,ax
|
||||
mov ecx,ds:[timer]
|
||||
mov cs:times,ecx
|
||||
pop ds ecx ax
|
||||
ret
|
||||
times dd 0
|
||||
|
||||
;->Ecx time elapsed
|
||||
EndTimer:
|
||||
push ax ds
|
||||
mov ax,Bios
|
||||
mov ds,ax
|
||||
mov ecx,ds:[timer]
|
||||
sub ecx,cs:times
|
||||
pop ds ax
|
||||
ret
|
||||
|
||||
;->
|
||||
GetLptOut:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
|
||||
GetLptIn:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
inc dx
|
||||
in al,dx
|
||||
shr al,3
|
||||
pop dx
|
||||
ret
|
||||
|
||||
GetLptInOut:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
add dx,2
|
||||
in al,dx
|
||||
and al,11111b
|
||||
pop dx
|
||||
ret
|
||||
|
||||
SetLptOut:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
out dx,al
|
||||
pop dx
|
||||
ret
|
||||
|
||||
SetLptIn:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
inc dx
|
||||
out dx,al
|
||||
pop dx
|
||||
ret
|
||||
|
||||
SetLptInOut:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
add dx,2
|
||||
out dx,al
|
||||
pop dx
|
||||
ret
|
||||
|
||||
;R‚alise un checksum 8 bits sur donn‚es DS:SI, nb CX r‚sultat dans dl
|
||||
Checksum8:
|
||||
push cx si
|
||||
check:
|
||||
add dl,[si]
|
||||
inc si
|
||||
dec cx
|
||||
jnz check
|
||||
pop si cx
|
||||
ret
|
||||
|
||||
;DS:SI pointeur sur donn‚es, CX nombres de donn‚es, AL token
|
||||
SendLptBlock:
|
||||
push ax bx cx edx si edi bp
|
||||
mov dx,cx
|
||||
shl edx,16
|
||||
mov dh,al
|
||||
call checksum8
|
||||
mov edi,edx
|
||||
xor dh,dh
|
||||
mov bp,dx
|
||||
mov ah,maxtry
|
||||
retry:
|
||||
mov bl,4
|
||||
xor al,al
|
||||
header:
|
||||
mov dx,di
|
||||
call sendlpt
|
||||
setne al
|
||||
jc outt
|
||||
rol edi,8
|
||||
dec bl
|
||||
jnz header
|
||||
cmp al,0
|
||||
jne notgood
|
||||
mov dl,ACK
|
||||
jmp allsend
|
||||
notgood:
|
||||
mov dl,NACK
|
||||
allsend:
|
||||
call sendlpt
|
||||
setne al
|
||||
jc outt
|
||||
cmp al,0
|
||||
je okheader
|
||||
dec ah
|
||||
jnz retry
|
||||
jmp outt
|
||||
okheader:
|
||||
cmp cx,0
|
||||
je endoftrans
|
||||
mov di,maxtry
|
||||
retry2:
|
||||
mov bx,cx
|
||||
xor ax,ax
|
||||
body:
|
||||
mov dl,[si+bx-1]
|
||||
add ah,dl
|
||||
call sendlpt
|
||||
setne al
|
||||
jc outt
|
||||
dec bx
|
||||
jnz body
|
||||
cmp al,0
|
||||
jne notgood2
|
||||
mov dl,ACK
|
||||
jmp allisend
|
||||
notgood2:
|
||||
mov dl,NACK
|
||||
allisend:
|
||||
call sendlpt
|
||||
setne al
|
||||
jc outt
|
||||
cmp al,0
|
||||
je endoftrans
|
||||
dec di
|
||||
jnz retry2
|
||||
outt:
|
||||
stc
|
||||
endoftrans:
|
||||
mov al,ah
|
||||
xor ah,ah
|
||||
cmp bp,ax
|
||||
pop bp edi si edx cx bx ax
|
||||
ret
|
||||
|
||||
;Receptionne en es:di les donn‚es au nombres de CX token AL (AH) (ECX)
|
||||
receiveLptBlock:
|
||||
push bx dx si bp
|
||||
mov ah,maxtry
|
||||
retrye:
|
||||
mov bl,4
|
||||
headere:
|
||||
call receivelpt
|
||||
jc outte
|
||||
mov cl,dl
|
||||
rol ecx,8
|
||||
dec bl
|
||||
jnz headere
|
||||
call receivelpt
|
||||
jc outte
|
||||
cmp dl,ACK
|
||||
je okheadere
|
||||
dec ah
|
||||
jnz retrye
|
||||
jmp outte
|
||||
okheadere:
|
||||
mov al,ch
|
||||
xor ch,ch
|
||||
mov bp,cx
|
||||
rol ecx,16
|
||||
cmp cx,0
|
||||
je endoftranse
|
||||
mov si,maxtry
|
||||
retrye2:
|
||||
mov bx,cx
|
||||
xor ah,ah
|
||||
bodye:
|
||||
call receivelpt
|
||||
jc outte
|
||||
mov es:[di+bx-1],dl
|
||||
add ah,dl
|
||||
dec bx
|
||||
jnz bodye
|
||||
call receivelpt
|
||||
jc outte
|
||||
cmp dl,ACK
|
||||
je endoftranse
|
||||
dec si
|
||||
jnz retrye2
|
||||
outte:
|
||||
stc
|
||||
endoftranse:
|
||||
mov bl,ah
|
||||
xor bh,bh
|
||||
cmp bp,bx
|
||||
pop bp si dx bx
|
||||
ret
|
||||
video db 0
|
||||
end start
|
327
noyau/souris.asm
|
@ -1,327 +0,0 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0h
|
||||
start:
|
||||
jmp tsr
|
||||
drv db 'MOUSE',0
|
||||
Tsr:
|
||||
cli
|
||||
cmp ax,1234h
|
||||
jne nomore
|
||||
mov ax,4321h
|
||||
jmp itsok
|
||||
nomore:
|
||||
push bx ax
|
||||
mov ah,4
|
||||
mov bh,0
|
||||
int 50h
|
||||
mov bl,al
|
||||
pop ax
|
||||
cmp byte ptr cs:isact,1
|
||||
je nottest
|
||||
mov cs:isact,1
|
||||
and bl,10000b
|
||||
cmp bl,16
|
||||
jae react
|
||||
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:
|
||||
mov cs:isact,0
|
||||
sti
|
||||
iret
|
||||
nottest:
|
||||
pop bx
|
||||
jmp endofint
|
||||
current dw 0
|
||||
tables dw cmdmouse
|
||||
dw cmdmouse2
|
||||
dw detectmouse
|
||||
dw getmouse
|
||||
dw getmousescreen
|
||||
dw configmouse
|
||||
|
||||
isact db 0
|
||||
|
||||
;Envoie une commande AL … la souris via controleur clavier
|
||||
cmdmouse:
|
||||
push ax
|
||||
videbuff1:
|
||||
in al, 64h
|
||||
and al, 10b
|
||||
jne videbuff1
|
||||
mov al, 00d4h
|
||||
out 64h, al
|
||||
videbuff2:
|
||||
in al, 64h
|
||||
and al, 10b
|
||||
jne videbuff2
|
||||
pop ax
|
||||
out 60h, al
|
||||
in al, 60h
|
||||
ret
|
||||
|
||||
;Envoie une commande2 AL … la souris via controleur clavier carry=nomouse
|
||||
cmdmouse2:
|
||||
push ax
|
||||
videbuff21:
|
||||
in al, 64h
|
||||
and al, 10b
|
||||
jne videbuff21
|
||||
mov al, 0060h
|
||||
out 64h, al
|
||||
videbuff22:
|
||||
in al, 64h
|
||||
and al, 10b
|
||||
jne videbuff22
|
||||
pop ax
|
||||
out 60h, al
|
||||
in al, 60h
|
||||
ret
|
||||
|
||||
Detectmouse:
|
||||
push ax cx
|
||||
mov al, 0a8h ;AUX enable
|
||||
out 64h, al
|
||||
mov al, 0f3h ;Set sample
|
||||
call cmdmouse
|
||||
mov al, 100 ;Set sample
|
||||
call cmdmouse
|
||||
mov al, 0e8h ;Set resolution
|
||||
call cmdmouse
|
||||
mov al, 01 ;Set resolution
|
||||
call cmdmouse
|
||||
mov al, 0e7h ;Set scale 2:1
|
||||
call cmdmouse
|
||||
mov al, 0f4h ;Enable device
|
||||
call cmdmouse
|
||||
mov al, 47h ;Interruption ON
|
||||
call cmdmouse2
|
||||
mov cx, 1024
|
||||
testmouse:
|
||||
in al, 60h ;Lecture du port de donn‚es
|
||||
cmp al, 250 ;Test si il y a une souris
|
||||
je okmouse
|
||||
dec cx
|
||||
jnz testmouse
|
||||
stc
|
||||
jmp endoftest
|
||||
okmouse:
|
||||
clc
|
||||
endoftest:
|
||||
pop cx ax
|
||||
ret
|
||||
|
||||
;envoie en bx,cx les coordonn‚es et en dl les boutons
|
||||
getmouse:
|
||||
mov bx,cs:rx
|
||||
mov cx,cs:ry
|
||||
mov dl,cs:button
|
||||
sub dl,8
|
||||
and dl,0Fh
|
||||
clc
|
||||
ret
|
||||
|
||||
;envoie en di les coordonn‚es ecran et en dl les boutons
|
||||
getmousescreen:
|
||||
mov di,cs:xy
|
||||
mov dl,cs:button
|
||||
sub dl,8
|
||||
and dl,0Fh
|
||||
clc
|
||||
ret
|
||||
|
||||
|
||||
;configure la rapidit‚ dans cl et dans ah,al sphŠre x et y
|
||||
Configmouse:
|
||||
mov cs:speed,cl
|
||||
mov cs:spherex,ah
|
||||
mov cs:spherey,al
|
||||
ret
|
||||
|
||||
Button db 0
|
||||
rx dw 0
|
||||
ry dw 0
|
||||
VX db 0
|
||||
VY db 0
|
||||
X dw 7FFFh
|
||||
Y dw 7FFFh
|
||||
speed db 6
|
||||
spherex db 0
|
||||
spherey db 0
|
||||
count db 0
|
||||
error db 0
|
||||
xy dw 0
|
||||
old db 0
|
||||
;Gestionnaire de souris PS/2
|
||||
react:
|
||||
push ax bx cx dx di ds es
|
||||
push cs
|
||||
pop ds
|
||||
in al, 60h
|
||||
cmp error, 1
|
||||
je gest1
|
||||
cmp count, 1
|
||||
je gest1
|
||||
cmp count, 2
|
||||
je gest2
|
||||
cmp count, 3
|
||||
je gest3
|
||||
|
||||
gest1:
|
||||
mov count, 2
|
||||
mov Button, al
|
||||
and al, 00001000b
|
||||
cmp al, 8
|
||||
je gest1end
|
||||
mov error, 1
|
||||
jmp gest1end2
|
||||
gest1end:
|
||||
mov error, 0
|
||||
gest1end2:
|
||||
mov count, 2
|
||||
jmp endgest
|
||||
gest2:
|
||||
mov count, 3
|
||||
mov VX, al
|
||||
jmp endgest
|
||||
gest3:
|
||||
mov count, 1
|
||||
mov VY, al
|
||||
jmp endgest
|
||||
endgest:
|
||||
cmp error,1
|
||||
je errormouse
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
mov cl,speed
|
||||
movsx bx,VY
|
||||
shl bx,cl
|
||||
cmp spherey,0
|
||||
jne nolimity
|
||||
xor ah,ah
|
||||
mov al,[di]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text4
|
||||
shl ax,3
|
||||
text4:
|
||||
dec ax
|
||||
cmp bx,0
|
||||
jg decy
|
||||
cmp ry,ax
|
||||
jae noaddy
|
||||
jmp nolimity
|
||||
decy:
|
||||
cmp ry,0
|
||||
je noaddy
|
||||
nolimity:
|
||||
sub y,bx
|
||||
noaddy:
|
||||
movsx bx,VX
|
||||
shl bx,cl
|
||||
cmp spherex,0
|
||||
jne nolimitx
|
||||
xor ah,ah
|
||||
mov al,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text5
|
||||
shl ax,3
|
||||
text5:
|
||||
dec ax
|
||||
cmp bx,0
|
||||
jl decx
|
||||
cmp rx,ax
|
||||
jae noaddx
|
||||
jmp nolimitx
|
||||
decx:
|
||||
cmp rx,0
|
||||
je noaddx
|
||||
nolimitx:
|
||||
add x,bx
|
||||
noaddx:
|
||||
mov ax,x
|
||||
mov bx,0FFFFh
|
||||
xor ch,ch
|
||||
mov cl,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text1
|
||||
shl cx,3
|
||||
text1:
|
||||
mul cx
|
||||
div bx
|
||||
mov rx,ax
|
||||
mov ax,y
|
||||
xor ch,ch
|
||||
mov cl,[di]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text2
|
||||
shl cx,3
|
||||
text2:
|
||||
mul cx
|
||||
div bx
|
||||
mov ry,ax
|
||||
xor ch,ch
|
||||
mov cl,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text3
|
||||
shl cx,3
|
||||
text3:
|
||||
mul cx
|
||||
add ax,rx
|
||||
cmp byte ptr [di+7],4
|
||||
mov di,ax
|
||||
jbe textpoint
|
||||
mov ax,0A000h
|
||||
mov es,ax
|
||||
jmp graphpoint
|
||||
textpoint:
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
shl di,1
|
||||
inc di
|
||||
graphpoint:
|
||||
mov bx,xy
|
||||
cmp byte ptr es:[bx],070h
|
||||
jne waschanged
|
||||
mov al,old
|
||||
mov byte ptr es:[bx],al
|
||||
waschanged:
|
||||
mov xy,di
|
||||
mov al,es:[di]
|
||||
mov old,al
|
||||
mov byte ptr es:[di],070h
|
||||
mov al, 20h
|
||||
out 0a0h, al
|
||||
out 20h, al
|
||||
errormouse:
|
||||
pop es ds di dx cx bx ax
|
||||
mov cs:isact,0
|
||||
pop bx
|
||||
iret
|
||||
infos db 40 dup (0)
|
||||
|
||||
end start
|
|
@ -9,6 +9,9 @@ include "..\include\mem.h"
|
|||
include "..\include\divers.h"
|
||||
include "..\include\cpu.h"
|
||||
include "..\include\pci.h"
|
||||
include "..\include\fat.h"
|
||||
|
||||
memorystart equ 0052h ;premier bloc de la mémoire
|
||||
|
||||
org 0h
|
||||
|
||||
|
@ -33,8 +36,6 @@ start:
|
|||
call biosprint,offset msg_ok
|
||||
call biosprint,offset msg_memory_section
|
||||
mov ax,cs
|
||||
dec ax
|
||||
dec ax
|
||||
call mbloadsection,ax
|
||||
jc error
|
||||
call biosprint,offset msg_ok
|
||||
|
@ -54,23 +55,26 @@ suite:
|
|||
pop gs
|
||||
call biosprint,offset msg_ok
|
||||
call biosprint,offset msg_video_init
|
||||
call [setvideomode],2
|
||||
call [cs:setvideomode],2
|
||||
jc error
|
||||
call [clearscreen]
|
||||
call [print],offset msg_memory
|
||||
call [print],offset msg_ok2
|
||||
call [print],offset msg_memory_init
|
||||
call [print],offset msg_ok2
|
||||
call [print],offset msg_memory_section
|
||||
call [print],offset msg_ok2
|
||||
call [print],offset msg_memory_jumps
|
||||
call [print],offset msg_ok2
|
||||
call [print],offset msg_video_init
|
||||
call [print],offset msg_ok2
|
||||
call [print],offset msg_cpu_detect
|
||||
call [cpuinfo],offset thecpu
|
||||
call [setinfo],offset thecpu,offset temp
|
||||
call [print],offset msg_ok2
|
||||
call [cs:clearscreen]
|
||||
call [cs:print],offset msg_memory
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_memory_init
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_memory_section
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_memory_jumps
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_video_init
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_handler
|
||||
;call installirqhandler
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_cpu_detect
|
||||
call [cs:cpuinfo],offset thecpu
|
||||
call [cs:setinfo],offset thecpu,offset temp
|
||||
call [cs:print],offset msg_ok2
|
||||
push offset temp
|
||||
xor eax,eax
|
||||
mov al,[thecpu.family]
|
||||
|
@ -81,11 +85,11 @@ suite:
|
|||
push eax
|
||||
push offset thecpu.names
|
||||
push offset thecpu.vendor
|
||||
call [print],offset msg_cpu_detect_inf
|
||||
call [print],offset msg_pci
|
||||
call [pciinfo],offset thepci
|
||||
call [cs:print],offset msg_cpu_detect_inf
|
||||
call [cs:print],offset msg_pci
|
||||
call [cs:pciinfo],offset thepci
|
||||
jc nopci
|
||||
call [print],offset msg_ok2
|
||||
call [cs:print],offset msg_ok2
|
||||
xor eax,eax
|
||||
mov al,[thepci.maxbus]
|
||||
push eax
|
||||
|
@ -93,25 +97,25 @@ suite:
|
|||
push eax
|
||||
mov al,[thepci.version_major]
|
||||
push eax
|
||||
call [print],offset msg_pci_info
|
||||
call [print],offset msg_pci_enum
|
||||
xor ebx,ebx
|
||||
xor ecx,ecx
|
||||
xor esi,esi
|
||||
call [cs:print],offset msg_pci_info
|
||||
call [cs:print],offset msg_pci_enum
|
||||
xor bx,bx
|
||||
xor cx,cx
|
||||
xor si,si
|
||||
searchpci:
|
||||
call [getcardinfo],bx,cx,si,offset temp
|
||||
call [cs:getcardinfo],bx,cx,si,offset temp
|
||||
jc stopthis
|
||||
mov al,[(pcidata offset temp).subclass]
|
||||
push ax
|
||||
mov al,[(pcidata offset temp).class]
|
||||
push ax
|
||||
call [getpcisubclass]
|
||||
call [cs:getpcisubclass]
|
||||
push dx
|
||||
push ax
|
||||
mov al,[(pcidata offset temp).class]
|
||||
xor ah,ah
|
||||
push ax
|
||||
call [getpciclass]
|
||||
call [cs:getpciclass]
|
||||
push dx
|
||||
push ax
|
||||
push 4
|
||||
|
@ -124,7 +128,7 @@ searchpci:
|
|||
push eax
|
||||
mov ax,[(pcidata offset temp).vendor]
|
||||
push eax
|
||||
call [print],offset msg_pci_card
|
||||
call [cs:print],offset msg_pci_card
|
||||
inc si
|
||||
cmp si,7
|
||||
jbe searchpci
|
||||
|
@ -139,16 +143,28 @@ stopthis:
|
|||
jbe searchpci
|
||||
jmp next
|
||||
nopci:
|
||||
call [print],offset msg_echec2
|
||||
call [cs:print],offset msg_echec2
|
||||
next:
|
||||
call [print],offset msg_fini
|
||||
; call [detectvmware]
|
||||
; jne novirtual
|
||||
; call [print],offset msg_vmware
|
||||
;novirtual:
|
||||
call [cs:detectvmware]
|
||||
jne novirtual
|
||||
call [cs:print],offset msg_vmware
|
||||
novirtual:
|
||||
call [cs:print],offset msg_flat
|
||||
call enablea20
|
||||
call flatmode
|
||||
xor ax,ax
|
||||
mov fs,ax
|
||||
mov esi,0100000h
|
||||
mov [dword ptr fs:esi],"OKIN"
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:print],offset msg_disk_init
|
||||
call [cs:initdrive]
|
||||
jc error2
|
||||
call [cs:print],offset msg_ok2
|
||||
call [cs:execfile],offset shell
|
||||
|
||||
error2:
|
||||
call [print],offset msg_error2
|
||||
call [cs:print],offset msg_error2
|
||||
call bioswaitkey
|
||||
jmp far 0FFFFh:0000h
|
||||
|
||||
|
@ -157,7 +173,7 @@ error:
|
|||
call bioswaitkey
|
||||
jmp far 0FFFFh:0000h
|
||||
|
||||
|
||||
shell find <"COMMANDE.CE",0,0,0,1,>
|
||||
thepci pciinf <>
|
||||
thecpu cpu <>
|
||||
temp db 256 dup (0)
|
||||
|
@ -165,17 +181,20 @@ return db 0dh,0ah,0
|
|||
msg_memory db "Initialisation de la memoire",0
|
||||
msg_memory_init db " -Creation du bloc primordial",0
|
||||
msg_memory_section db " -Developpement des sections",0
|
||||
msg_memory_jumps db " -Redirection du systeme",0
|
||||
msg_memory_jumps db "Redirection du systeme",0
|
||||
msg_video_init db "Initialisation du pilote VIDEO",0
|
||||
msg_handler db "Initialisation du gestionnaire d'interruption",0
|
||||
msg_cpu_detect db "Dectection du processeur",0
|
||||
msg_cpu_detect_inf db " -Fondeur : %0\l -Modele : %0\l -Revision : %u\l -Version : %u\l -Famille : %u\l -Technologies: %0\l",0
|
||||
msg_pci db "Detection des systemes PCI",0
|
||||
msg_pci_info db " -Version : %yB.%yB\l -Nombre de bus : %u\l",0
|
||||
msg_pci_info db " -Version : %yB.%yB\l -Numero bus max: %u\l",0
|
||||
msg_pci_enum db " -Enumeration des peripheriques PCI:\l"
|
||||
db " |Vendeur|Modele|Bus |Dev.|Func|Classe.Sous-classe\l",0
|
||||
msg_pci_card db " | %hW | %hW |%w|%w|%w|%0P.%0P\l",0
|
||||
;msg_vmware db "\c04 VMWare a été detecté !!!\c07",0
|
||||
msg_fini db "\c04Demarrage terminee : c pas encore fini :(:(:( mais c pour l'inspiration !",0
|
||||
msg_vmware db "\c04 VMWare a ete detecte !!!\c07\l",0
|
||||
msg_flat db "Initialisation du Flat Real Mode\l",0
|
||||
msg_disk_init db "Initialisation du pilote DISQUE\l",0
|
||||
|
||||
|
||||
msg_error db " [Erreur]",0dh,0ah,"<Pressez une touche pour redemarrer le systeme>",0
|
||||
msg_ok db " [ Ok ]",0dh,0ah,0
|
||||
|
@ -183,38 +202,62 @@ msg_error2 db "\h70 [\c04Erreur\c07]\g00,49<Pressez une touche pour rede
|
|||
msg_ok2 db "\h70 [\c02 Ok \c07]\l",0
|
||||
msg_echec2 db "\h70 [\c0CPasser\c07]\l",0
|
||||
|
||||
imports:
|
||||
db "VIDEO::setvideomode",0
|
||||
setvideomode dd 0
|
||||
db "VIDEO::clearscreen",0
|
||||
clearscreen dd 0
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
db "DETECT.LIB::cpuinfo",0
|
||||
cpuinfo dd 0
|
||||
db "DETECT.LIB::setinfo",0
|
||||
setinfo dd 0
|
||||
db "DETECT.LIB::pciinfo",0
|
||||
pciinfo dd 0
|
||||
db "DETECT.LIB::getcardinfo",0
|
||||
getcardinfo dd 0
|
||||
db "DETECT.LIB::getpcisubclass",0
|
||||
getpcisubclass dd 0
|
||||
db "DETECT.LIB::getpciclass",0
|
||||
getpciclass dd 0
|
||||
;db "DETECT.LIB::detectvmware",0
|
||||
;detectvmware dd 0
|
||||
dw 0
|
||||
|
||||
exports:
|
||||
exporting
|
||||
declare biosprinth
|
||||
declare biosprint
|
||||
declare mbinit
|
||||
declare mbcreate
|
||||
declare mbfree
|
||||
declare mbclean
|
||||
declare mbresident
|
||||
declare mbnonresident
|
||||
declare mbchown
|
||||
declare mballoc
|
||||
declare mbfind
|
||||
declare mbfindsb
|
||||
declare mbget
|
||||
declare mbloadfuncs
|
||||
declare mbsearchfunc
|
||||
declare bioswaitkey
|
||||
declare mbloadsection
|
||||
declare enableirq
|
||||
declare enableirq
|
||||
declare readimr
|
||||
declare readirr
|
||||
declare readisr
|
||||
declare seteoi
|
||||
declare enablea20
|
||||
declare disablea20
|
||||
declare flatmode
|
||||
declare installirqhandler
|
||||
declare irqhandler
|
||||
declare isenableirq
|
||||
declare isrequestirq
|
||||
declare isinserviceirq
|
||||
declare savecontext
|
||||
declare restorecontextg
|
||||
ende
|
||||
|
||||
|
||||
importing
|
||||
use VIDEO,setvideomode
|
||||
use VIDEO,clearscreen
|
||||
use VIDEO.LIB,print
|
||||
use DETECT.LIB,cpuinfo
|
||||
use DETECT.LIB,setinfo
|
||||
use DETECT.LIB,pciinfo
|
||||
use DETECT.LIB,getcardinfo
|
||||
use DETECT.LIB,getpcisubclass
|
||||
use DETECT.LIB,getpciclass
|
||||
use DETECT.LIB,detectvmware
|
||||
use DISQUE,initdrive
|
||||
use DISQUE,projfile
|
||||
use DISQUE,execfile
|
||||
endi
|
||||
|
||||
include "mcb.asm"
|
||||
mb1:
|
||||
includebin "video.sys"
|
||||
mb2:
|
||||
includebin "..\lib\video.lib"
|
||||
mb3:
|
||||
includebin "..\lib\detect.lib"
|
||||
mb4:
|
||||
include "8259a.asm"
|
||||
|
||||
section:
|
||||
dw offset mb0
|
||||
|
@ -230,9 +273,25 @@ dw offset mb3-offset mb2
|
|||
db "VIDEO.LIB",0
|
||||
|
||||
dw offset mb3
|
||||
dw offset mb4-offset mb
|
||||
dw offset mb4-offset mb3
|
||||
db "DETECT.LIB",0
|
||||
|
||||
dw offset mb4
|
||||
dw offset mb5-offset mb4
|
||||
db "DISQUE",0
|
||||
|
||||
dd 0
|
||||
|
||||
mb1:
|
||||
includebin "video.sys"
|
||||
mb2:
|
||||
includebin "..\lib\video.lib"
|
||||
mb3:
|
||||
includebin "..\lib\detect.lib"
|
||||
mb4:
|
||||
includebin "disque.sys"
|
||||
mb5:
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
mcb.sys(49)
|
||||
video.sys(47)
|
||||
horloge.sys(8)
|
||||
8259a.sys(50)
|
||||
disque.sys(48)
|
||||
souris.sys(74)
|
||||
heure.sys(8)
|
||||
clavier.sys(9)
|
||||
port.sys(D)
|
804
noyau/video.asm
|
@ -1,53 +1,23 @@
|
|||
lnk_boot = tlink /x
|
||||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
asm= lzasm /z/t
|
||||
lnk= elink
|
||||
|
||||
all: detect.com editeur.com gestion.com logo.com pmode.com souris.com test.com verifier.com volume.com memoire.com
|
||||
all: exem-lib.lib exem-ce.ce pmode.ce isa.ce editeur.ce volume.ce test.ce verifier.ce gestion.ce logo.ce souris.ce
|
||||
|
||||
memoire.com: memoire.asm
|
||||
$(asm) memoire
|
||||
$(lnk) memoire
|
||||
.asm.obj:
|
||||
$(asm) $<
|
||||
|
||||
detect.com: detect.asm
|
||||
$(asm) detect
|
||||
$(lnk) detect
|
||||
|
||||
editeur.com: editeur.asm
|
||||
$(asm) editeur
|
||||
$(lnk) editeur
|
||||
|
||||
gestion.com: gestion.asm
|
||||
$(asm) gestion
|
||||
$(lnk) gestion
|
||||
|
||||
logo.com: logo.asm
|
||||
$(asm) logo
|
||||
$(lnk) logo
|
||||
|
||||
pmode.com: pmode.asm
|
||||
$(asm) pmode
|
||||
$(lnk) pmode
|
||||
|
||||
souris.com: souris.asm
|
||||
$(asm) souris
|
||||
$(lnk) souris
|
||||
|
||||
test.com: test.asm
|
||||
$(asm) test
|
||||
$(lnk) test
|
||||
|
||||
verifier.com: verifier.asm
|
||||
$(asm) verifier
|
||||
$(lnk) verifier
|
||||
|
||||
volume.com: volume.asm
|
||||
$(asm) volume
|
||||
$(lnk) volume
|
||||
.obj.ce:
|
||||
$(lnk) $< $*.ce
|
||||
|
||||
.obj.lib:
|
||||
$(lnk) $< $*.lib
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.ce
|
||||
del *.bak
|
||||
del *.lib
|
||||
del *.com
|
||||
del *.com
|
||||
del *.bin
|
||||
del *.sys
|
||||
del *.err
|
||||
|
|
|
@ -1,551 +0,0 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\pci.h
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
|
||||
realstart:
|
||||
call getpciinfos
|
||||
mov [pciversion],bx
|
||||
mov [nbbus],cl
|
||||
mov [pcitype],al
|
||||
|
||||
xor edx,edx
|
||||
mov dl,[nbbus]
|
||||
inc dl
|
||||
push edx
|
||||
mov dx,[pciversion]
|
||||
push edx
|
||||
mov dx,[pciversion]
|
||||
shr dx,8
|
||||
push edx
|
||||
push offset msg
|
||||
call [print]
|
||||
|
||||
mov di,offset types
|
||||
mov bx,7
|
||||
mov al,pcitype
|
||||
vote:
|
||||
bt ax,bx
|
||||
jnc nowas
|
||||
shl bx,1
|
||||
push word ptr [di+bx]
|
||||
call [print]
|
||||
shr bx,1
|
||||
nowas:
|
||||
dec bx
|
||||
jns vote
|
||||
push offset return
|
||||
call [print]
|
||||
|
||||
xor ax,ax
|
||||
xor cx,cx
|
||||
mov si,offset infos
|
||||
search:
|
||||
mov di,si
|
||||
call Getallfunctionsinfos
|
||||
jc stopthis
|
||||
mov dh,[si+pci.subclass]
|
||||
mov dl,[si+pci.class]
|
||||
;sousclasse
|
||||
mov di,offset subclasse
|
||||
call getpcisubclass
|
||||
push di
|
||||
;classe
|
||||
mov di,offset classe
|
||||
call getpciclass
|
||||
push di
|
||||
;fonction
|
||||
mov dl,ch
|
||||
push edx
|
||||
;device
|
||||
mov dl,cl
|
||||
push edx
|
||||
;bus
|
||||
mov dl,al
|
||||
push edx
|
||||
;device
|
||||
mov dx,[si+pci.device]
|
||||
push edx
|
||||
;vendeur
|
||||
mov dx,[si+pci.vendor]
|
||||
push edx
|
||||
|
||||
push offset msg2
|
||||
call [print]
|
||||
|
||||
inc ch
|
||||
cmp ch,7
|
||||
jbe search
|
||||
stopthis:
|
||||
xor ch,ch
|
||||
inc cl
|
||||
cmp cl,31
|
||||
jbe search
|
||||
xor cl,cl
|
||||
inc al
|
||||
cmp al,16
|
||||
jbe search
|
||||
retf
|
||||
|
||||
msg db "COS2000 hardware detecteur V1.6\lBIOS PCI version %hB.%hB a ete detecte !\lNombre de bus : %u\lCaracterisques PCI: ",0
|
||||
msg2 db "Peripherique :%hW Constructeur :%hW Id :%hB.%hB.%hB Classe :%0.%0\l",0
|
||||
return db "\l",0
|
||||
classe db 128 dup (0)
|
||||
subclasse db 128 dup (0)
|
||||
|
||||
types dw config1
|
||||
dw config2
|
||||
dw null
|
||||
dw null
|
||||
dw config3
|
||||
dw config4
|
||||
dw null
|
||||
dw null
|
||||
|
||||
null db 'indefini',0
|
||||
config1 db 'Config Mechanism 1',0
|
||||
config2 db 'Config Mechanism 2',0
|
||||
config3 db 'Special Cycle Mechanism 1',0
|
||||
config4 db 'Special Cycle Mechanism 2',0
|
||||
|
||||
PciVersion dw 0
|
||||
Nbbus db 0
|
||||
PciType db 0
|
||||
infos db 256 dup (0)
|
||||
|
||||
;fonction 0-7 bus 0-255 device 0-31
|
||||
|
||||
;renvoie en es:di de classe dl
|
||||
getpciclass:
|
||||
push ax cx dx si di ds es
|
||||
push es
|
||||
push di
|
||||
mov di,dx
|
||||
and di,0FFh
|
||||
shl di,1
|
||||
mov di,[offset classes+di]
|
||||
mov cx,0FFh
|
||||
mov al,0
|
||||
push cs
|
||||
pop es
|
||||
repne scasb
|
||||
sub cx,0FFh
|
||||
neg cx
|
||||
sub di,cx
|
||||
mov si,di
|
||||
push cs
|
||||
pop ds
|
||||
pop di
|
||||
pop es
|
||||
rep movsb
|
||||
pop es ds di si dx cx ax
|
||||
ret
|
||||
|
||||
;renvoie en es:di la sous-classe de dh et de classe dl
|
||||
getpcisubclass:
|
||||
push ax cx dx si di ds es
|
||||
push es
|
||||
push di
|
||||
mov di,dx
|
||||
and di,0FFh
|
||||
shl di,1
|
||||
mov di,[offset classesd+di]
|
||||
xchg dh,dl
|
||||
xor dh,dh
|
||||
cmp dx,80h
|
||||
jne suiteac
|
||||
mov di,offset divers
|
||||
jmp found
|
||||
suiteac:
|
||||
shl dx,1
|
||||
add di,dx
|
||||
mov di,[di]
|
||||
found:
|
||||
mov cx,0FFh
|
||||
mov al,0
|
||||
push cs
|
||||
pop es
|
||||
repne scasb
|
||||
sub cx,0FFh
|
||||
neg cx
|
||||
sub di,cx
|
||||
mov si,di
|
||||
push cs
|
||||
pop ds
|
||||
pop di
|
||||
pop es
|
||||
rep movsb
|
||||
pop es ds di si dx cx ax
|
||||
ret
|
||||
divers db 'divers',0
|
||||
|
||||
classes:
|
||||
dw offset class0
|
||||
dw offset class1
|
||||
dw offset class2
|
||||
dw offset class3
|
||||
dw offset class4
|
||||
dw offset class5
|
||||
dw offset class6
|
||||
dw offset class7
|
||||
dw offset class8
|
||||
dw offset class9
|
||||
dw offset class10
|
||||
dw offset class11
|
||||
dw offset class12
|
||||
dw offset class13
|
||||
dw offset class14
|
||||
dw offset class15
|
||||
dw offset class16
|
||||
dw offset class17
|
||||
class0 db 'ancien',0
|
||||
class1 db 'stockage',0
|
||||
class2 db 'reseau',0
|
||||
class3 db 'affichage',0
|
||||
class4 db 'multimedia',0
|
||||
class5 db 'memoire',0
|
||||
class6 db 'pont',0
|
||||
class7 db 'communication',0
|
||||
class8 db 'systeme',0
|
||||
class9 db 'acquisition',0
|
||||
class10 db 'dock',0
|
||||
class11 db 'processeur',0
|
||||
class12 db 'bus serie',0
|
||||
class13 db 'sans fil',0
|
||||
class14 db 'intelligent',0
|
||||
class15 db 'satellite',0
|
||||
class16 db 'cryptage',0
|
||||
class17 db 'traitement signal',0
|
||||
|
||||
|
||||
;Classes et sous classes
|
||||
classesd:
|
||||
dw offset class0d
|
||||
dw offset class1d
|
||||
dw offset class2d
|
||||
dw offset class3d
|
||||
dw offset class4d
|
||||
dw offset class5d
|
||||
dw offset class6d
|
||||
dw offset class7d
|
||||
dw offset class8d
|
||||
dw offset class9d
|
||||
dw offset class10d
|
||||
dw offset class11d
|
||||
dw offset class12d
|
||||
dw offset class13d
|
||||
dw offset class14d
|
||||
dw offset class15d
|
||||
dw offset class16d
|
||||
dw offset class17d
|
||||
|
||||
class0d:
|
||||
dw offset subclass00
|
||||
dw offset subclass01
|
||||
subclass00 db 'divers',0
|
||||
subclass01 db 'vga',0
|
||||
|
||||
class1d:
|
||||
dw offset subclass10
|
||||
dw offset subclass11
|
||||
dw offset subclass12
|
||||
dw offset subclass13
|
||||
dw offset subclass14
|
||||
subclass10 db 'scsi',0
|
||||
subclass11 db 'ide',0
|
||||
subclass12 db 'disquette',0
|
||||
subclass13 db 'ipi',0
|
||||
subclass14 db 'raid',0
|
||||
|
||||
class2d:
|
||||
dw offset subclass20
|
||||
dw offset subclass21
|
||||
dw offset subclass22
|
||||
dw offset subclass23
|
||||
dw offset subclass24
|
||||
subclass20 db 'ethernet',0
|
||||
subclass21 db 'token ring',0
|
||||
subclass22 db 'fddi',0
|
||||
subclass23 db 'atm',0
|
||||
subclass24 db 'isdn',0
|
||||
|
||||
class3d:
|
||||
dw offset subclass30
|
||||
dw offset subclass31
|
||||
dw offset subclass32
|
||||
subclass30 db 'vga',0
|
||||
subclass31 db 'xga',0
|
||||
subclass32 db '3D',0
|
||||
|
||||
class4d:
|
||||
dw offset subclass40
|
||||
dw offset subclass41
|
||||
dw offset subclass42
|
||||
subclass40 db 'video',0
|
||||
subclass41 db 'audio',0
|
||||
subclass42 db 'telephonie',0
|
||||
|
||||
class5d:
|
||||
dw offset subclass50
|
||||
dw offset subclass51
|
||||
subclass50 db 'ram',0
|
||||
subclass51 db 'flash',0
|
||||
|
||||
class6d:
|
||||
dw offset subclass60
|
||||
dw offset subclass61
|
||||
dw offset subclass62
|
||||
dw offset subclass63
|
||||
dw offset subclass64
|
||||
dw offset subclass65
|
||||
dw offset subclass66
|
||||
dw offset subclass67
|
||||
dw offset subclass68
|
||||
subclass60 db 'hote',0
|
||||
subclass61 db 'isa',0
|
||||
subclass62 db 'eisa',0
|
||||
subclass63 db 'mca',0
|
||||
subclass64 db 'pci',0
|
||||
subclass65 db 'pcmcia',0
|
||||
subclass66 db 'nubus',0
|
||||
subclass67 db 'cardbus',0
|
||||
subclass68 db 'RACEway',0
|
||||
|
||||
class7d:
|
||||
dw offset subclass70
|
||||
dw offset subclass71
|
||||
dw offset subclass72
|
||||
dw offset subclass73
|
||||
subclass70 db 'serie',0
|
||||
subclass71 db 'parallele',0
|
||||
subclass72 db 'serie multiport',0
|
||||
subclass73 db 'modem',0
|
||||
|
||||
class8d:
|
||||
dw offset subclass80
|
||||
dw offset subclass81
|
||||
dw offset subclass82
|
||||
dw offset subclass83
|
||||
dw offset subclass84
|
||||
subclass80 db 'pic',0
|
||||
subclass81 db 'dma',0
|
||||
subclass82 db 'timer',0
|
||||
subclass83 db 'rtc',0
|
||||
subclass84 db 'hotplug',0
|
||||
|
||||
class9d:
|
||||
dw offset subclass90
|
||||
dw offset subclass91
|
||||
dw offset subclass92
|
||||
dw offset subclass93
|
||||
dw offset subclass94
|
||||
subclass90 db 'clavier',0
|
||||
subclass91 db 'stylo',0
|
||||
subclass92 db 'souris',0
|
||||
subclass93 db 'scanner',0
|
||||
subclass94 db 'joystick',0
|
||||
|
||||
class10d:
|
||||
dw offset subclass100
|
||||
subclass100 db 'station',0
|
||||
|
||||
class11d:
|
||||
dw offset subclass110
|
||||
dw offset subclass111
|
||||
dw offset subclass112
|
||||
dw offset subclass113
|
||||
dw offset subclass114
|
||||
subclass110 db '386',0
|
||||
subclass111 db '486',0
|
||||
subclass112 db 'pentium',0
|
||||
subclass113 db 'alpha',0
|
||||
subclass114 db 'coprocesseur',0
|
||||
|
||||
class12d:
|
||||
dw offset subclass120
|
||||
dw offset subclass121
|
||||
dw offset subclass122
|
||||
dw offset subclass123
|
||||
dw offset subclass124
|
||||
dw offset subclass125
|
||||
subclass120 db 'firewire',0
|
||||
subclass121 db 'access',0
|
||||
subclass122 db 'ssa',0
|
||||
subclass123 db 'usb',0
|
||||
subclass124 db 'fibre',0
|
||||
subclass125 db 'smbus',0
|
||||
|
||||
class13d:
|
||||
dw offset subclass130
|
||||
dw offset subclass131
|
||||
dw offset subclass132
|
||||
subclass130 db 'irda',0
|
||||
subclass131 db 'ir',0
|
||||
subclass132 db 'rf',0
|
||||
|
||||
class14d:
|
||||
dw offset subclass140
|
||||
subclass140 db 'IO arch',0
|
||||
|
||||
class15d:
|
||||
dw offset subclass150
|
||||
dw offset subclass151
|
||||
dw offset subclass152
|
||||
dw offset subclass153
|
||||
subclass150 db 'tv',0
|
||||
subclass151 db 'audio',0
|
||||
subclass152 db 'voix',0
|
||||
subclass153 db 'donnees',0
|
||||
|
||||
class16d:
|
||||
dw offset subclass160
|
||||
dw offset subclass161
|
||||
subclass160 db 'reseau',0
|
||||
subclass161 db 'jeux',0
|
||||
|
||||
class17d:
|
||||
dw offset subclass170
|
||||
subclass170 db 'dpio',0
|
||||
|
||||
|
||||
;bx pci version, cl nbbus, al pci type
|
||||
getPciInfos:
|
||||
push dx
|
||||
mov ax,0B101h
|
||||
xor edi,edi
|
||||
mov edx," PCI"
|
||||
int 1Ah
|
||||
jc ErrorPci
|
||||
cmp dx,04350h
|
||||
jne ErrorPci
|
||||
clc
|
||||
pop dx
|
||||
ret
|
||||
errorpci:
|
||||
stc
|
||||
pop dx
|
||||
ret
|
||||
|
||||
;al=bus cl=deviceid ch=func es:di
|
||||
Getallfunctionsinfos:
|
||||
push ax bx dx di
|
||||
cmp ch,0
|
||||
je amultiorfirst
|
||||
mov bl,0Eh
|
||||
push cx
|
||||
xor ch,ch
|
||||
call getfunctioninfo
|
||||
pop cx
|
||||
and dl,80h
|
||||
cmp dl,0
|
||||
jne amultiorfirst
|
||||
mov word ptr [di],0000h
|
||||
jmp notexist
|
||||
amultiorfirst:
|
||||
xor bl,bl
|
||||
goinfos:
|
||||
call getfunctioninfo
|
||||
inc bl
|
||||
cmp bl,2
|
||||
ja notzarb
|
||||
cmp dl,0FFh
|
||||
je notexist
|
||||
notzarb:
|
||||
mov es:[di],dl
|
||||
inc di
|
||||
cmp bl,255
|
||||
jb goinfos
|
||||
pop di
|
||||
push di
|
||||
cmp word ptr [di],0000h
|
||||
je notexist
|
||||
clc
|
||||
pop di dx bx ax
|
||||
ret
|
||||
notexist:
|
||||
stc
|
||||
pop di dx bx ax
|
||||
ret
|
||||
|
||||
; PCI TYPE 1
|
||||
;*******************************************************************
|
||||
config1_addr equ 0CF8h
|
||||
config1_data equ 0CFCh
|
||||
|
||||
pci_type1_detect:
|
||||
mov dx, config1_addr+3
|
||||
mov al, 01h
|
||||
out dx,al
|
||||
mov dx,config1_addr
|
||||
in eax,dx
|
||||
mov ecx,eax
|
||||
mov eax,80000000h
|
||||
out dx,eax
|
||||
in eax,dx
|
||||
cmp eax,80000000h
|
||||
jne endofdetectiontype1
|
||||
mov eax,ecx
|
||||
out dx,eax
|
||||
endofdetectiontype1:
|
||||
ret
|
||||
|
||||
;al=bus bl=index cl=deviceid ch=func->dl
|
||||
getfunctioninfo:
|
||||
push eax bx cx
|
||||
mov ah,80h
|
||||
shl eax,16
|
||||
mov ah,cl
|
||||
shl ah,3
|
||||
or ah,ch
|
||||
mov al,bl
|
||||
and al,0fch
|
||||
mov dx,0cf8h
|
||||
out dx,eax
|
||||
mov dx,0CFCh
|
||||
and bl,3
|
||||
or dl,bl
|
||||
in al,dx
|
||||
mov dl,al
|
||||
pop cx bx eax
|
||||
ret
|
||||
|
||||
|
||||
; PCI TYPE 2
|
||||
;*******************************************************************
|
||||
config2_reg0 equ 0CFBh
|
||||
config2_reg1 equ 0CF8h
|
||||
config2_reg2 equ 0CFAh
|
||||
|
||||
pci_type2_detect:
|
||||
xor ax,ax
|
||||
mov dx,config2_reg0
|
||||
out dx,ax
|
||||
mov dx,config2_reg1
|
||||
out dx,ax
|
||||
mov dx,config2_reg2
|
||||
out dx,ax
|
||||
mov ax,config2_reg1
|
||||
in al,dx
|
||||
cmp al,0
|
||||
jne endofdetectiontype2
|
||||
mov ax,config2_reg0
|
||||
in al,dx
|
||||
cmp al,0
|
||||
jne endofdetectiontype2
|
||||
endofdetectiontype2:
|
||||
ret
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
dw 0
|
||||
|
||||
end start
|
|
@ -1,54 +1,50 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
include "..\include\graphic.h"
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
mov ax,0305h
|
||||
mov bx,0008h
|
||||
int 16h
|
||||
mov ah,28h
|
||||
int 47h
|
||||
mov ax,0002
|
||||
int 47H
|
||||
mov ah,2
|
||||
int 47h
|
||||
call [savestate]
|
||||
call [setvideomode],2
|
||||
xor ebp,ebp
|
||||
xor ax,ax
|
||||
mov fs,ax
|
||||
mov ah,43
|
||||
int 47h
|
||||
Adres:
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
dec byte ptr [di]
|
||||
mov al,[di+1]
|
||||
call [disablescroll]
|
||||
adres:
|
||||
call [saveparamto],offset infos
|
||||
mov al,[infos.lines]
|
||||
dec al
|
||||
mov [lastline],al
|
||||
mov al,[infos.columns]
|
||||
sub al,16
|
||||
mov bl,al
|
||||
shr al,2
|
||||
mov [di+1],al
|
||||
mov [sizex],al
|
||||
and bl,11b
|
||||
mov [di+2],bl
|
||||
mov al,[di+7]
|
||||
cmp al,oldmode
|
||||
mov [sizex2],bl
|
||||
mov al,[infos.mode]
|
||||
cmp al,[oldmode]
|
||||
je noinit
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov oldmode,al
|
||||
call [clearscreen]
|
||||
mov [oldmode],al
|
||||
noinit:
|
||||
mov bx,0
|
||||
mov ah,25
|
||||
int 47h
|
||||
mov bh,infos
|
||||
call [setxy],0,0
|
||||
mov edi,ebp
|
||||
mov bh,[lastline]
|
||||
lines:
|
||||
xor edx,edx
|
||||
mov dx,di
|
||||
|
@ -60,49 +56,43 @@ lines:
|
|||
push offset spaces
|
||||
call [print]
|
||||
mov dx,di
|
||||
mov al,infos+1
|
||||
mov al,[sizex]
|
||||
mov esi,edi
|
||||
doaline:
|
||||
mov edx,edi
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
mov fs,dx
|
||||
push dword ptr fs:[di]
|
||||
push [dword ptr fs:di]
|
||||
push 8
|
||||
call [showhex]
|
||||
push ' '
|
||||
call [showchar]
|
||||
call [showchar],' '
|
||||
inc edi
|
||||
dec al
|
||||
jnz doaline
|
||||
mov edi,esi
|
||||
push offset spaces2
|
||||
call [print]
|
||||
mov al,infos+1
|
||||
mov al,[sizex]
|
||||
doaline2:
|
||||
mov edx,edi
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
mov fs,dx
|
||||
push word ptr fs:[di]
|
||||
push [word ptr fs:di]
|
||||
call [showchar]
|
||||
inc edi
|
||||
dec al
|
||||
jnz doaline2
|
||||
dec bh
|
||||
je outes
|
||||
cmp byte ptr infos+2,0
|
||||
cmp [sizex2],0
|
||||
je lines
|
||||
mov ah,6
|
||||
int 47h
|
||||
call [addline]
|
||||
jmp lines
|
||||
outes:
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
mov ah,25
|
||||
int 47h
|
||||
push offset menu
|
||||
call [print]
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset menu
|
||||
waitkey:
|
||||
mov ax,0
|
||||
int 16h
|
||||
|
@ -138,17 +128,13 @@ outes:
|
|||
suit6:
|
||||
cmp ax,4100h
|
||||
jne suit7
|
||||
mov dword ptr [pope],'TIDE'
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
mov ah,25
|
||||
int 47h
|
||||
push offset menu
|
||||
call [print]
|
||||
mov [dword ptr pope],'TIDE'
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset menu
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov xxyy2,3
|
||||
mov xxyy,3
|
||||
mov [xxyy2],3
|
||||
mov [xxyy],3
|
||||
call calc1
|
||||
call calc2
|
||||
waitst:
|
||||
|
@ -156,7 +142,7 @@ waitst:
|
|||
int 16h
|
||||
cmp ah,41h
|
||||
jne tre
|
||||
mov dword ptr [pope],' EUV'
|
||||
mov [dword ptr pope],' EUV'
|
||||
push cs
|
||||
pop es
|
||||
jmp adres
|
||||
|
@ -165,93 +151,83 @@ tre:
|
|||
jne write
|
||||
cmp ah,48h
|
||||
jne tre1
|
||||
cmp yy,0
|
||||
cmp [yy],0
|
||||
je waitst
|
||||
dec yy
|
||||
dec [yy]
|
||||
jmp cursor
|
||||
tre1:
|
||||
cmp ah,50h
|
||||
jne tre2
|
||||
mov al,infos
|
||||
mov al,[lastline]
|
||||
dec al
|
||||
xor ah,ah
|
||||
cmp yy,ax
|
||||
cmp [yy],ax
|
||||
je waitst
|
||||
inc yy
|
||||
inc [yy]
|
||||
jmp cursor
|
||||
tre2:
|
||||
cmp ah,4Dh
|
||||
jne tre4
|
||||
cmp xx,15
|
||||
cmp [xx],15
|
||||
je waitst
|
||||
inc xx
|
||||
inc [xx]
|
||||
jmp cursor
|
||||
tre4:
|
||||
cmp ah,4Bh
|
||||
jne waitst
|
||||
cmp xx,0
|
||||
cmp [xx],0
|
||||
je waitst
|
||||
dec xx
|
||||
dec [xx]
|
||||
jmp cursor
|
||||
write:
|
||||
call AsciiHex2dec
|
||||
call asciihex2dec
|
||||
cmp cl,15
|
||||
ja waitst
|
||||
call calc1
|
||||
call calc2
|
||||
mov edi,es:[bx-1]
|
||||
mov dx,es:[si-1]
|
||||
mov byte ptr es:[bx],0112
|
||||
mov es:[bx-1],al
|
||||
mov edi,[es:bx-1]
|
||||
mov dx,[es:si-1]
|
||||
mov [byte ptr es:bx],0112
|
||||
mov [es:bx-1],al
|
||||
writs:
|
||||
mov ax,0
|
||||
int 16H
|
||||
mov ch,cl
|
||||
call AsciiHex2dec
|
||||
call asciihex2dec
|
||||
cmp cl,15
|
||||
ja writs
|
||||
shl ch,4
|
||||
add ch,cl
|
||||
mov es:[bx+1],al
|
||||
mov es:[si-1],ch
|
||||
mov [es:bx+1],al
|
||||
mov [es:si-1],ch
|
||||
mov ax,bx
|
||||
call calc3
|
||||
mov gs:[bx],ch
|
||||
mov [gs:bx],ch
|
||||
pusha
|
||||
popa
|
||||
mov cl,gs:[bx]
|
||||
mov cl,[gs:bx]
|
||||
cmp ch,cl
|
||||
je no
|
||||
push si ax
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
mov ah,25
|
||||
int 47h
|
||||
push offset msg
|
||||
call [print]
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset msg
|
||||
mov ax,0
|
||||
int 16h
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
mov ah,25
|
||||
int 47h
|
||||
push offset menu
|
||||
call [print]
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset menu
|
||||
pop bx si
|
||||
mov es:[bx-1],edi
|
||||
mov es:[si-1],dx
|
||||
mov [es:bx-1],edi
|
||||
mov [es:si-1],dx
|
||||
no:
|
||||
|
||||
inc xx
|
||||
cmp xx,16
|
||||
inc [xx]
|
||||
cmp [xx],16
|
||||
jne pasde
|
||||
inc yy
|
||||
mov xx,0h
|
||||
inc [yy]
|
||||
mov [xx],0h
|
||||
pasde:
|
||||
call calc1
|
||||
call calc2
|
||||
jmp waitst
|
||||
|
||||
cursor:
|
||||
call calc1
|
||||
call calc2
|
||||
|
@ -259,56 +235,52 @@ cursor:
|
|||
suit7:
|
||||
cmp ax,4200h
|
||||
jne adres
|
||||
mov ah,29h
|
||||
int 47h
|
||||
call [restorestate]
|
||||
retf
|
||||
|
||||
calc1:
|
||||
push ax dx si
|
||||
mov ax,xx
|
||||
mov dx,xx
|
||||
mov ax,[xx]
|
||||
mov dx,[xx]
|
||||
shl ax,2
|
||||
shl dx,1
|
||||
add ax,dx
|
||||
add ax,27
|
||||
mov bx,YY
|
||||
mov dx,yy
|
||||
mov bx,[yy]
|
||||
mov dx,[yy]
|
||||
shl bx,5
|
||||
shl dx,7
|
||||
add bx,dx
|
||||
add bx,ax
|
||||
mov byte ptr es:[bx],112
|
||||
mov byte ptr es:[bx+2],112
|
||||
mov si,xxyy
|
||||
mov byte ptr es:[si],07
|
||||
mov byte ptr es:[si+2],07
|
||||
mov xxyy,bx
|
||||
mov [byte ptr es:bx],112
|
||||
mov [byte ptr es:bx+2],112
|
||||
mov si,[xxyy]
|
||||
mov [byte ptr es:si],07
|
||||
mov [byte ptr es:si+2],07
|
||||
mov [xxyy],bx
|
||||
pop si dx ax
|
||||
ret
|
||||
|
||||
calc2:
|
||||
push ax bx dx
|
||||
mov si,YY
|
||||
mov dx,yy
|
||||
mov si,[yy]
|
||||
mov dx,[yy]
|
||||
shl si,5
|
||||
shl dx,7
|
||||
add si,dx
|
||||
mov dx,xx
|
||||
mov dx,[xx]
|
||||
shl dx,1
|
||||
add si,dx
|
||||
add si,129
|
||||
mov byte ptr es:[si],112
|
||||
mov bx,xxyy2
|
||||
mov byte ptr es:[bx],07
|
||||
mov xxyy2,si
|
||||
mov [byte ptr es:si],112
|
||||
mov bx,[xxyy2]
|
||||
mov [byte ptr es:bx],07
|
||||
mov [xxyy2],si
|
||||
pop dx bx ax
|
||||
ret
|
||||
|
||||
calc3:
|
||||
push dx
|
||||
xor ebx,ebx
|
||||
mov bx,xx
|
||||
mov dx,yy
|
||||
mov bx,[xx]
|
||||
mov dx,[yy]
|
||||
shl dx,4
|
||||
add bx,dx
|
||||
add ebx,ebp
|
||||
|
@ -318,7 +290,6 @@ calc3:
|
|||
mov gs,dx
|
||||
pop dx
|
||||
ret
|
||||
|
||||
asciihex2dec:
|
||||
cmp al,'a'
|
||||
jb nomin
|
||||
|
@ -341,13 +312,16 @@ calc3:
|
|||
endt:
|
||||
ret
|
||||
|
||||
dep db ':',0
|
||||
sect dw 0
|
||||
xx dw 0
|
||||
yy dw 0
|
||||
xxyy dw 3
|
||||
xxyy2 dw 3
|
||||
|
||||
lastline db 0
|
||||
sizex db 0
|
||||
sizex2 db 0
|
||||
|
||||
dep db ':',0
|
||||
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
|
||||
|
@ -356,18 +330,21 @@ spaces2 db '\c04 | \c07',0
|
|||
|
||||
showbuffer db 35 dup (0FFh)
|
||||
oldmode db 0
|
||||
infos db 40 dup (0)
|
||||
infos vgainf <>
|
||||
|
||||
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
|
||||
importing
|
||||
use VIDEO,setvideomode
|
||||
use VIDEO,savestate
|
||||
use VIDEO,restorestate
|
||||
use VIDEO,setxy
|
||||
use VIDEO,addline
|
||||
use VIDEO,saveparamto
|
||||
use VIDEO,disablescroll
|
||||
use VIDEO,clearscreen
|
||||
use VIDEO.LIB,print
|
||||
use VIDEO.LIB,showhex
|
||||
use VIDEO.LIB,showchar
|
||||
endi
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,29 +1,26 @@
|
|||
.model small
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,offset exports,>
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
push offset message
|
||||
call [affiche]
|
||||
call [print],offset message
|
||||
call [waitkey]
|
||||
retf
|
||||
|
||||
message db 'Appel de la librairie video !',0
|
||||
message db 'Appel de la librairie \c02video\c07 et de la librairie \c02EXEM-LIB.LIB\c07 !',0
|
||||
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
affiche dd 0
|
||||
db "EXEM-LIB.LIB::waitkey",0
|
||||
waitkey dd 0
|
||||
dw 0
|
||||
exports:
|
||||
|
||||
end start
|
||||
importing
|
||||
use VIDEO.LIB,print
|
||||
use EXEM-LIB.LIB,waitkey
|
||||
endi
|
||||
|
|
|
@ -1,25 +1,24 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,offset exports,>
|
||||
header exe <"CE",1,0,0,offset exports,,,>
|
||||
|
||||
|
||||
getvar2:
|
||||
waitkey:
|
||||
mov ax,0
|
||||
int 16h
|
||||
retf
|
||||
|
||||
exporting
|
||||
|
||||
imports:
|
||||
|
||||
exports:
|
||||
db "waitkey",0
|
||||
dw getvar2
|
||||
dw 0
|
||||
end start
|
||||
declare waitkey
|
||||
ende
|
||||
|
|
|
@ -1,64 +1,66 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\fat.h"
|
||||
include "..\include\divers.h"
|
||||
include "..\include\graphic.h"
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
include ..\include\fat.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
push offset msg1
|
||||
call [print]
|
||||
|
||||
mov ah,3
|
||||
int 48h
|
||||
call [saveparamto],offset infos
|
||||
call [print],offset msg1
|
||||
call [initdrive]
|
||||
xor bp,bp
|
||||
mov di,offset bufferentry
|
||||
mov ah,7
|
||||
int 48h
|
||||
call [findfirstfile],offset bufferentry
|
||||
jc nofiles
|
||||
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 [word bufferentry.result.fileattr]
|
||||
push [bufferentry.result.filesize]
|
||||
push [bufferentry.result.filetime]
|
||||
push [bufferentry.result.filedate]
|
||||
push [bufferentry.result.filetimecrea]
|
||||
push [bufferentry.result.filedatecrea]
|
||||
mov bx,offset bufferentry.result.filename
|
||||
push bx
|
||||
push offset line
|
||||
call [print]
|
||||
|
||||
call [findnextfile],offset bufferentry
|
||||
jc nofiles
|
||||
inc bp
|
||||
mov ah,8
|
||||
int 48h
|
||||
jnc go
|
||||
jmp go
|
||||
nofiles:
|
||||
push offset menu
|
||||
call [print]
|
||||
mov xx,1
|
||||
mov xxold,2
|
||||
call Select
|
||||
call [print],offset menu
|
||||
mov [xx],1
|
||||
call changelineattr,[xx],112
|
||||
endof:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp ah,50h
|
||||
jne tre1
|
||||
cmp xx,bp
|
||||
cmp [xx],bp
|
||||
ja endof
|
||||
inc xx
|
||||
call select
|
||||
call changelineattr,[xx],7
|
||||
inc [xx]
|
||||
call changelineattr,[xx],112
|
||||
jmp endof
|
||||
tre1:
|
||||
cmp ah,48h
|
||||
jne tre2
|
||||
cmp xx,1
|
||||
cmp [xx],1
|
||||
je endof
|
||||
dec xx
|
||||
call select
|
||||
call changelineattr,[xx],7
|
||||
dec [xx]
|
||||
call changelineattr,[xx],112
|
||||
jmp endof
|
||||
tre2:
|
||||
cmp al,0Dh
|
||||
|
@ -72,23 +74,27 @@ tre4:
|
|||
jne endof
|
||||
retf
|
||||
|
||||
;selectionne la ligne xx
|
||||
Select:
|
||||
push ax di
|
||||
mov di,xxold
|
||||
mov al,7
|
||||
add di,3
|
||||
mov ah,32
|
||||
int 47h
|
||||
mov ax,xx
|
||||
mov xxold,ax
|
||||
mov di,xx
|
||||
mov ah,32
|
||||
mov al,112
|
||||
add di,3
|
||||
int 47h
|
||||
pop di ax
|
||||
;couleur al pour ligne %0 en %1
|
||||
PROC changelineattr near
|
||||
USES ax,bx,di,es
|
||||
ARG @line:word,@attr:word
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov ax,[@line]
|
||||
add ax,3
|
||||
mul [cs:infos.columns]
|
||||
mov di,ax
|
||||
shl di,1
|
||||
mov al,[cs:infos.columns]
|
||||
inc di
|
||||
mov bx,[@attr]
|
||||
@@popep:
|
||||
mov [es:di],bl
|
||||
add di,2
|
||||
dec al
|
||||
jnz @@popep
|
||||
ret
|
||||
endp changelineattr
|
||||
|
||||
xx dw 1
|
||||
xxold dw 0
|
||||
|
@ -96,14 +102,16 @@ menu db '\c70 [F1] Lire disque [F9] Quitter
|
|||
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
|
||||
db '\g00,03-------------------------------------------------------------------------------\l',0
|
||||
line db '\c07%n %d %t %d %t %z %a\l',0
|
||||
bufferentry db 512 dup (0)
|
||||
bufferentry find <>
|
||||
infos vgainf <>
|
||||
|
||||
importing
|
||||
use VIDEO.LIB,print
|
||||
use VIDEO,saveparamto
|
||||
use DISQUE,initdrive
|
||||
use DISQUE,findfirstfile
|
||||
use DISQUE,findnextfile
|
||||
endi
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
dw 0
|
||||
|
||||
end start
|
||||
|
|
|
@ -1,11 +1,20 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
org 0100h
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,,,,offset realstart>
|
||||
|
||||
realstart:
|
||||
retf
|
||||
|
||||
PNP_ADR_PORT equ 0x279
|
||||
PNP_WRITE_PORT equ 0xA79
|
||||
|
@ -35,5 +44,3 @@ ctc:
|
|||
|
||||
;attend pendant ax microsecondes
|
||||
usleep:
|
||||
|
||||
end start
|
||||
|
|
|
@ -1,100 +1,73 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
mov ah,7
|
||||
mov cx,65535
|
||||
int 49h
|
||||
call [cs:mballoc],65535
|
||||
jc problem3
|
||||
push gs
|
||||
push ax
|
||||
pop es
|
||||
mov ah,7
|
||||
mov cx,65535
|
||||
int 49h
|
||||
jc problem3
|
||||
mov si,offset logo
|
||||
mov ah,4
|
||||
xor di,di
|
||||
int 48h
|
||||
call [cs:projfile],offset logo
|
||||
jc problem
|
||||
|
||||
|
||||
push es
|
||||
pop ds
|
||||
push gs
|
||||
pop es
|
||||
xor si,si
|
||||
xor di,di
|
||||
mov ah,6
|
||||
int 48h
|
||||
mov ecx,eax
|
||||
call [cs:mbfind],offset logo
|
||||
jc problem
|
||||
call [cs:decompressrle],ax,0,es,0,cx
|
||||
jc problem2
|
||||
|
||||
push es
|
||||
pop ds
|
||||
|
||||
mov ah,28h
|
||||
int 47h
|
||||
mov ax,0008h
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
push 0
|
||||
call cs:[loadbmppalet]
|
||||
push 150
|
||||
push 20
|
||||
push 0
|
||||
call cs:[showbmp]
|
||||
call [cs:savestate]
|
||||
call [cs:setvideomode],word 8
|
||||
call [cs:clearscreen]
|
||||
call [cs:loadbmppalet],word 0
|
||||
call [cs:showbmp],word 0,word 20,word 150
|
||||
jc problem4
|
||||
push cs
|
||||
pop ds
|
||||
push offset poper
|
||||
call [print]
|
||||
call [cs:print],offset poper
|
||||
endofit:
|
||||
xor ax,ax
|
||||
int 16h
|
||||
mov ah,29h
|
||||
int 47h
|
||||
call [cs:restorestate]
|
||||
retf
|
||||
|
||||
problem:
|
||||
push cs
|
||||
pop ds
|
||||
push offset error
|
||||
call [print]
|
||||
call [cs:print],offset error
|
||||
jmp endofit
|
||||
|
||||
problem2:
|
||||
push cs
|
||||
pop ds
|
||||
push offset error2
|
||||
call [print]
|
||||
call [cs:print],offset error2
|
||||
jmp endofit
|
||||
|
||||
problem3:
|
||||
push cs
|
||||
pop ds
|
||||
push offset error3
|
||||
call [print]
|
||||
call [cs:print],offset error3
|
||||
jmp endofit
|
||||
|
||||
problem4:
|
||||
push cs
|
||||
pop ds
|
||||
push offset error4
|
||||
call [print]
|
||||
call [cs:print],offset error4
|
||||
jmp endofit
|
||||
|
||||
poper db '\c0BC\c0CO\c0DS\c0E2\c0E0\c0E0\c0F0 en mode graphique',0
|
||||
logo db 'cos.rip',0
|
||||
logo db 'COS.RIP',0
|
||||
ok1 db 'Chargement de l''image OK',0
|
||||
ok2 db 'Decompression de l''image OK',0
|
||||
error3 db '\c04Une erreur est apparue lors de l''allocation de mémoire',0
|
||||
|
@ -103,12 +76,16 @@ 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
|
||||
importing
|
||||
use VIDEO,restorestate
|
||||
use VIDEO,savestate
|
||||
use VIDEO,setvideomode
|
||||
use VIDEO,clearscreen
|
||||
use DISQUE,decompressrle
|
||||
use DISQUE,projfile
|
||||
use SYSTEME,mbfind
|
||||
use SYSTEME,mballoc
|
||||
use VIDEO.LIB,print
|
||||
use BMP.LIB,showbmp
|
||||
use BMP.LIB,loadbmppalet
|
||||
endi
|
||||
|
|
|
@ -1,82 +0,0 @@
|
|||
.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
|
|
@ -1,15 +1,22 @@
|
|||
.model tiny
|
||||
.486p
|
||||
smart
|
||||
.code
|
||||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
start:
|
||||
header exe <"CE",1,0,0,,,,offset realstart>
|
||||
|
||||
realstart:
|
||||
mov eax,cr0
|
||||
or al,1
|
||||
mov cr0,eax
|
||||
retf
|
||||
|
||||
db 0CBh
|
||||
|
||||
end start
|
||||
|
|
|
@ -1,27 +1,32 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
mov ah,2
|
||||
int 74h
|
||||
push offset message
|
||||
call [print]
|
||||
call [mouseon]
|
||||
jc errormouse
|
||||
call [print],offset message
|
||||
retf
|
||||
|
||||
message db 'Activation de la souris',0
|
||||
errormouse:
|
||||
call [print],offset errormessage
|
||||
retf
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
dw 0
|
||||
message db 'Activation de la souris\l',0
|
||||
errormessage db 'impossible d''activer la souris\l',0
|
||||
|
||||
end start
|
||||
importing
|
||||
use VIDEO.LIB,print
|
||||
use MOUSE.SYS,mouseon
|
||||
endi
|
||||
|
|
|
@ -1,133 +1,98 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
mov ah,28h
|
||||
int 47h
|
||||
|
||||
push word ptr 0FFFFh
|
||||
push dword ptr 652201
|
||||
push dword ptr 1545454545
|
||||
push word ptr 1523
|
||||
push word ptr 2041
|
||||
call [savestate]
|
||||
push 0FFFFh
|
||||
pushd 652201
|
||||
pushd 1545454545
|
||||
push 1523
|
||||
push 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 5
|
||||
push 'i'
|
||||
push 'a'
|
||||
pushd 5041
|
||||
pushd 125645
|
||||
pushd 5041
|
||||
pushd 125645
|
||||
pushd 5041
|
||||
pushd 125645
|
||||
push offset message
|
||||
call [print]
|
||||
mov ax,0
|
||||
xor ax,ax
|
||||
int 16h
|
||||
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
|
||||
call [clearscreen]
|
||||
call [xchgpages]
|
||||
call [clearscreen]
|
||||
mov cx,200
|
||||
go1:
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,33
|
||||
int 47
|
||||
push offset textdemo1
|
||||
call [print]
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
call [print],offset textdemo1
|
||||
call put
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,33
|
||||
int 47h
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
dec cx
|
||||
jnz go1
|
||||
|
||||
mov cx,200
|
||||
go2:
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,33
|
||||
int 47h
|
||||
push offset textdemo2
|
||||
call [print]
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
call [print],offset textdemo2
|
||||
call put
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,33
|
||||
int 47h
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
dec cx
|
||||
jnz go2
|
||||
|
||||
mov cx,200
|
||||
go3:
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,33
|
||||
int 47h
|
||||
push offset textdemo3
|
||||
call [print]
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
call [print],offset textdemo3
|
||||
call put
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,33
|
||||
int 47h
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
dec cx
|
||||
jnz go3
|
||||
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
push offset texte2
|
||||
call [print]
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,30
|
||||
int 47h
|
||||
|
||||
call [xchgpages]
|
||||
call [clearscreen]
|
||||
call [print],offset texte2
|
||||
call [xchgpages]
|
||||
call [clearscreen]
|
||||
call [xchgpages]
|
||||
mov bp,255
|
||||
xor edx,edx
|
||||
go4:
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,33
|
||||
int 47h
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
inc edx
|
||||
push edx
|
||||
push offset texte3
|
||||
call [print]
|
||||
mov ah,30
|
||||
int 47h
|
||||
mov ah,33
|
||||
int 47h
|
||||
call [xchgpages]
|
||||
call [waitretrace]
|
||||
dec bp
|
||||
jnz go4
|
||||
push offset texte4
|
||||
call [print]
|
||||
mov ax,0
|
||||
int 16h
|
||||
mov ah,29h
|
||||
int 47h
|
||||
call [restorestate]
|
||||
retf
|
||||
|
||||
put:
|
||||
call random
|
||||
mov di,dx
|
||||
|
@ -135,24 +100,21 @@ and di,4096-2
|
|||
mov si,offset fond
|
||||
call showstring2
|
||||
ret
|
||||
|
||||
Random:
|
||||
random:
|
||||
push ax
|
||||
MOV AX,cs:[RandSeed]
|
||||
MOV AX,[cs:randseed]
|
||||
MOV DX,8405h
|
||||
MUL DX
|
||||
INC AX
|
||||
MOV cs:[RandSeed],AX
|
||||
MOV [cs:randseed],AX
|
||||
pop ax
|
||||
ret
|
||||
|
||||
randseed dw 1234h
|
||||
|
||||
Randomize:
|
||||
push ax cx dx
|
||||
mov ah,0
|
||||
int 1ah
|
||||
mov cs:randseed,dx
|
||||
mov [cs:randseed],dx
|
||||
pop dx cx ax
|
||||
ret
|
||||
|
||||
|
@ -188,16 +150,20 @@ showstring2:
|
|||
strinaize4:
|
||||
inc si
|
||||
mov cl,[si]
|
||||
mov es:[di],cx
|
||||
mov [es:di],cx
|
||||
add di,2
|
||||
dec bl
|
||||
jnz strinaize4
|
||||
pop di si cx bx es
|
||||
ret
|
||||
|
||||
imports:
|
||||
db "VIDEO.LIB::print",0
|
||||
print dd 0
|
||||
dw 0
|
||||
|
||||
end start
|
||||
importing
|
||||
use VIDEO.LIB,print
|
||||
use VIDEO,xchgpages
|
||||
use VIDEO,setvideomode
|
||||
use VIDEO,clearscreen
|
||||
use VIDEO,savestate
|
||||
use VIDEO,restorestate
|
||||
use VIDEO,waitretrace
|
||||
endi
|
||||
|
|
|
@ -1,24 +1,26 @@
|
|||
.model tiny
|
||||
.386c
|
||||
.code
|
||||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
|
||||
org 0h
|
||||
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
mov ah,28h
|
||||
int 47h
|
||||
push offset msg
|
||||
call [print]
|
||||
call [savestate]
|
||||
call [print],offset msg
|
||||
mov bp,1000h
|
||||
xor di,di
|
||||
xor cx,cx
|
||||
xor edx,edx
|
||||
VerifAll:
|
||||
verifall:
|
||||
mov ah,1
|
||||
int 16h
|
||||
jz nokey
|
||||
|
@ -38,11 +40,9 @@ nokey:
|
|||
div si
|
||||
mov dx,ax
|
||||
push edx
|
||||
push offset msg2
|
||||
call [print]
|
||||
call [print],offset msg2
|
||||
call gauge
|
||||
mov ah,2
|
||||
int 48h
|
||||
call [verifysector],cx
|
||||
jc errors
|
||||
je noprob
|
||||
inc di
|
||||
|
@ -53,29 +53,22 @@ noprob:
|
|||
enend:
|
||||
cmp di,0
|
||||
je noatall
|
||||
push offset error2
|
||||
call [print]
|
||||
call [print],offset error2
|
||||
jmp someof
|
||||
noatall:
|
||||
push offset noerror
|
||||
call [print]
|
||||
call [print],offset noerror
|
||||
someof:
|
||||
mov ah,0
|
||||
int 16h
|
||||
mov ah,29h
|
||||
int 47H
|
||||
call [restorestate]
|
||||
retf
|
||||
errors:
|
||||
push offset error
|
||||
call [print]
|
||||
call [print],offset error
|
||||
mov ah,0
|
||||
int 16h
|
||||
mov ah,29h
|
||||
int 47H
|
||||
call [restorestate]
|
||||
retf
|
||||
|
||||
|
||||
|
||||
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
|
||||
|
@ -85,10 +78,10 @@ msg2 db '\g10,20%u %%\g10,16%u cluster testes. \h34%u cluster defectueux.
|
|||
gauge:
|
||||
push ax dx
|
||||
mov ax,cx
|
||||
mul sizeof
|
||||
div max
|
||||
mul [sizeof]
|
||||
div [max]
|
||||
xor edx,edx
|
||||
mov dx,sizeof
|
||||
mov dx,[sizeof]
|
||||
sub dx,ax
|
||||
push dx
|
||||
push 'Û'
|
||||
|
@ -105,9 +98,9 @@ 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
|
||||
importing
|
||||
use VIDEO.LIB,print
|
||||
use VIDEO,savestate
|
||||
use VIDEO,restorestate
|
||||
use DISQUE,verifysector
|
||||
endi
|
||||
|
|
|
@ -1,121 +1,98 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
model tiny,stdcall
|
||||
p586N
|
||||
locals
|
||||
jumps
|
||||
codeseg
|
||||
option procalign:byte
|
||||
|
||||
include "..\include\mem.h"
|
||||
include "..\include\divers.h"
|
||||
include "..\include\graphic.h"
|
||||
|
||||
org 0h
|
||||
|
||||
include ..\include\mem.h
|
||||
|
||||
start:
|
||||
header exe <,1,0,,,offset imports,,>
|
||||
header exe <"CE",1,0,0,,offset imports,,offset realstart>
|
||||
|
||||
realstart:
|
||||
mov ax,0305h
|
||||
mov bx,0008h
|
||||
int 16h
|
||||
mov ah,28h
|
||||
int 47H
|
||||
mov ax,0002
|
||||
int 47H
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,43
|
||||
int 47h
|
||||
xor bp,bp
|
||||
push cs
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
Adres:
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
dec infos
|
||||
push cs
|
||||
pop es
|
||||
mov cx,sect
|
||||
mov di,offset buffer
|
||||
mov ah,0h
|
||||
int 48h
|
||||
jnc noerror
|
||||
call [savestate]
|
||||
call [setvideomode],2
|
||||
xor ebp,ebp
|
||||
xor ax,ax
|
||||
mov fs,ax
|
||||
call [disablescroll]
|
||||
adres:
|
||||
call [saveparamto],offset infos
|
||||
call [readsector],[sect],offset buffer
|
||||
jnc adres2
|
||||
errtr:
|
||||
mov ah,25
|
||||
mov bl,infos
|
||||
xor bh,bh
|
||||
int 47h
|
||||
push offset errordisk
|
||||
call [print]
|
||||
mov ax,0
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset errordisk
|
||||
xor ax,ax
|
||||
int 16h
|
||||
noerror:
|
||||
adres2:
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
dec byte ptr [di]
|
||||
mov al,[di+1]
|
||||
call [saveparamto],offset infos
|
||||
mov al,[infos.lines]
|
||||
dec al
|
||||
mov [lastline],al
|
||||
mov al,[infos.columns]
|
||||
sub al,16
|
||||
mov bl,al
|
||||
shr al,2
|
||||
mov [di+1],al
|
||||
mov [sizex],al
|
||||
and bl,11b
|
||||
mov [di+2],bl
|
||||
mov al,[di+7]
|
||||
cmp al,oldmode
|
||||
mov [sizex2],bl
|
||||
mov al,[infos.mode]
|
||||
cmp al,[oldmode]
|
||||
je noinit
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov oldmode,al
|
||||
call [clearscreen]
|
||||
mov [oldmode],al
|
||||
noinit:
|
||||
mov bx,0
|
||||
mov ah,25
|
||||
int 47h
|
||||
mov bh,infos
|
||||
mov di,bp
|
||||
call [setxy],0,0
|
||||
mov edi,ebp
|
||||
mov bh,[lastline]
|
||||
lines:
|
||||
xor edx,edx
|
||||
mov dx,di
|
||||
push edx
|
||||
mov dx,sect
|
||||
mov edx,edi
|
||||
mov dx,[sect]
|
||||
push edx
|
||||
push offset spaces
|
||||
call [print]
|
||||
mov al,infos+1
|
||||
mov si,di
|
||||
mov dx,di
|
||||
mov al,[sizex]
|
||||
mov esi,edi
|
||||
doaline:
|
||||
push dword ptr [di+offset buffer]
|
||||
push [dword ptr di+offset buffer]
|
||||
push 8
|
||||
call [showhex]
|
||||
push ' '
|
||||
call [showchar]
|
||||
inc di
|
||||
call [showchar],' '
|
||||
inc edi
|
||||
dec al
|
||||
jnz doaline
|
||||
mov di,si
|
||||
mov edi,esi
|
||||
push offset spaces2
|
||||
call [print]
|
||||
mov al,infos+1
|
||||
mov al,[sizex]
|
||||
doaline2:
|
||||
push word ptr [di+offset buffer]
|
||||
push [word ptr di+offset buffer]
|
||||
call [showchar]
|
||||
inc di
|
||||
inc edi
|
||||
dec al
|
||||
jnz doaline2
|
||||
dec bh
|
||||
je outes
|
||||
cmp byte ptr infos+2,0
|
||||
cmp [sizex2],0
|
||||
je lines
|
||||
mov ah,6
|
||||
int 47h
|
||||
call [addline]
|
||||
jmp lines
|
||||
outes:
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
mov ah,25
|
||||
int 47h
|
||||
push offset menu
|
||||
call [print]
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset menu
|
||||
waitkey:
|
||||
mov ax,0
|
||||
int 16h
|
||||
|
@ -135,16 +112,16 @@ outes:
|
|||
suit2:
|
||||
cmp ax,3D00h
|
||||
jne suit3
|
||||
cmp sect,2880
|
||||
cmp [sect],2880
|
||||
ja waitkey
|
||||
inc sect
|
||||
inc [sect]
|
||||
jmp adres
|
||||
suit3:
|
||||
cmp ax,3E00h
|
||||
jne suit4
|
||||
cmp sect,0
|
||||
cmp [sect],0
|
||||
je waitkey
|
||||
dec sect
|
||||
dec [sect]
|
||||
jmp adres
|
||||
suit4:
|
||||
cmp ax,3F00h
|
||||
|
@ -153,26 +130,19 @@ outes:
|
|||
suit5:
|
||||
cmp ax,4000h
|
||||
jne suit6
|
||||
mov cx,sect
|
||||
mov di,offset buffer
|
||||
mov ah,1
|
||||
int 48h
|
||||
call [writesector],[sect],offset buffer
|
||||
jnc waitkey
|
||||
jmp errtr
|
||||
suit6:
|
||||
cmp ax,4100h
|
||||
jne suit7
|
||||
mov dword ptr [pope],'TIDE'
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
mov ah,25
|
||||
int 47h
|
||||
push offset menu
|
||||
call [print]
|
||||
mov [dword ptr pope],'TIDE'
|
||||
call [setxy],0,[word ptr lastline]
|
||||
call [print],offset menu
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov xxyy2,3
|
||||
mov xxyy,3
|
||||
mov [xxyy2],3
|
||||
mov [xxyy],3
|
||||
call calc1
|
||||
call calc2
|
||||
waitst:
|
||||
|
@ -180,138 +150,131 @@ waitst:
|
|||
int 16h
|
||||
cmp ah,41h
|
||||
jne tre
|
||||
mov dword ptr [pope],'WEIV'
|
||||
mov [dword ptr pope],' EUV'
|
||||
push cs
|
||||
pop ds
|
||||
mov cx,sect
|
||||
mov si,offset buffer
|
||||
mov ah,1
|
||||
int 48h
|
||||
jnc adres
|
||||
pop es
|
||||
call [writesector],[sect],offset buffer
|
||||
jnc waitkey
|
||||
jmp errtr
|
||||
tre:
|
||||
cmp al,0
|
||||
jne write
|
||||
cmp ah,48h
|
||||
jne tre1
|
||||
cmp yy,0
|
||||
cmp [yy],0
|
||||
je waitst
|
||||
dec yy
|
||||
dec [yy]
|
||||
jmp cursor
|
||||
tre1:
|
||||
cmp ah,50h
|
||||
jne tre2
|
||||
mov al,infos
|
||||
mov al,[lastline]
|
||||
dec al
|
||||
xor ah,ah
|
||||
cmp yy,ax
|
||||
cmp [yy],ax
|
||||
je waitst
|
||||
inc yy
|
||||
inc [yy]
|
||||
jmp cursor
|
||||
tre2:
|
||||
cmp ah,4Dh
|
||||
jne tre4
|
||||
cmp xx,15
|
||||
cmp [xx],15
|
||||
je waitst
|
||||
inc xx
|
||||
inc [xx]
|
||||
jmp cursor
|
||||
tre4:
|
||||
cmp ah,4Bh
|
||||
jne waitst
|
||||
cmp xx,0
|
||||
cmp [xx],0
|
||||
je waitst
|
||||
dec xx
|
||||
dec [xx]
|
||||
jmp cursor
|
||||
write:
|
||||
call AsciiHex2dec
|
||||
call asciihex2dec
|
||||
cmp cl,15
|
||||
ja waitst
|
||||
call calc1
|
||||
call calc2
|
||||
mov byte ptr es:[bx],0112
|
||||
mov es:[bx-1],al
|
||||
mov edi,[es:bx-1]
|
||||
mov dx,[es:si-1]
|
||||
mov [byte ptr es:bx],0112
|
||||
mov [es:bx-1],al
|
||||
writs:
|
||||
mov ax,0
|
||||
int 16H
|
||||
int 16h
|
||||
mov ch,cl
|
||||
call AsciiHex2dec
|
||||
call asciihex2dec
|
||||
cmp cl,15
|
||||
ja writs
|
||||
shl ch,4
|
||||
add ch,cl
|
||||
mov es:[bx+1],al
|
||||
mov es:[si-1],ch
|
||||
mov [es:bx+1],al
|
||||
mov [es:si-1],ch
|
||||
mov ax,bx
|
||||
call calc3
|
||||
mov [bx],ch
|
||||
inc xx
|
||||
cmp xx,16
|
||||
inc [xx]
|
||||
cmp [xx],16
|
||||
jne pasde
|
||||
inc yy
|
||||
mov xx,0h
|
||||
inc [yy]
|
||||
mov [xx],0h
|
||||
pasde:
|
||||
call calc1
|
||||
call calc2
|
||||
jmp waitst
|
||||
|
||||
cursor:
|
||||
call calc1
|
||||
call calc2
|
||||
jmp waitst
|
||||
suit7:
|
||||
cmp ax,4200h
|
||||
jne adres2
|
||||
mov ah,29h
|
||||
int 47H
|
||||
jne adres
|
||||
call [restorestate]
|
||||
retf
|
||||
|
||||
calc1:
|
||||
push ax dx si
|
||||
mov ax,xx
|
||||
mov dx,xx
|
||||
mov ax,[xx]
|
||||
mov dx,[xx]
|
||||
shl ax,2
|
||||
shl dx,1
|
||||
add ax,dx
|
||||
add ax,27
|
||||
mov bx,YY
|
||||
mov dx,yy
|
||||
mov bx,[yy]
|
||||
mov dx,[yy]
|
||||
shl bx,5
|
||||
shl dx,7
|
||||
add bx,dx
|
||||
add bx,ax
|
||||
mov byte ptr es:[bx],112
|
||||
mov byte ptr es:[bx+2],112
|
||||
mov si,xxyy
|
||||
mov byte ptr es:[si],07
|
||||
mov byte ptr es:[si+2],07
|
||||
mov xxyy,bx
|
||||
mov [byte ptr es:bx],112
|
||||
mov [byte ptr es:bx+2],112
|
||||
mov si,[xxyy]
|
||||
mov [byte ptr es:si],07
|
||||
mov [byte ptr es:si+2],07
|
||||
mov [xxyy],bx
|
||||
pop si dx ax
|
||||
ret
|
||||
|
||||
calc2:
|
||||
push ax bx dx
|
||||
mov si,YY
|
||||
mov dx,yy
|
||||
mov si,[yy]
|
||||
mov dx,[yy]
|
||||
shl si,5
|
||||
shl dx,7
|
||||
add si,dx
|
||||
add si,2
|
||||
mov dx,xx
|
||||
mov dx,[xx]
|
||||
shl dx,1
|
||||
add si,dx
|
||||
add si,127
|
||||
mov byte ptr es:[si],112
|
||||
mov bx,xxyy2
|
||||
mov byte ptr es:[bx],07
|
||||
mov xxyy2,si
|
||||
add si,129
|
||||
mov [byte ptr es:si],112
|
||||
mov bx,[xxyy2]
|
||||
mov [byte ptr es:bx],07
|
||||
mov [xxyy2],si
|
||||
pop dx bx ax
|
||||
ret
|
||||
|
||||
calc3:
|
||||
push dx
|
||||
xor bx,bx
|
||||
mov bx,xx
|
||||
mov dx,yy
|
||||
mov bx,[xx]
|
||||
mov dx,[yy]
|
||||
shl dx,4
|
||||
add bx,dx
|
||||
add bx,bp
|
||||
|
@ -341,13 +304,17 @@ calc3:
|
|||
endt:
|
||||
ret
|
||||
|
||||
dep db ':',0
|
||||
sect dw 0
|
||||
xx dw 0
|
||||
yy dw 0
|
||||
xxyy dw 3
|
||||
xxyy2 dw 3
|
||||
|
||||
lastline db 0
|
||||
sizex db 0
|
||||
sizex2 db 0
|
||||
buffer db 2048 dup (0)
|
||||
|
||||
dep 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
|
||||
|
@ -356,20 +323,24 @@ spaces2 db '\c04 | \c07',0
|
|||
|
||||
showbuffer db 35 dup (0FFh)
|
||||
oldmode db 0
|
||||
infos db 40 dup (0)
|
||||
buffer db 2048 dup (0)
|
||||
sect dw 0
|
||||
infos vgainf <>
|
||||
|
||||
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
|
||||
importing
|
||||
use DISQUE,readsector
|
||||
use DISQUE,writesector
|
||||
use VIDEO,setvideomode
|
||||
use VIDEO,savestate
|
||||
use VIDEO,restorestate
|
||||
use VIDEO,setxy
|
||||
use VIDEO,addline
|
||||
use VIDEO,saveparamto
|
||||
use VIDEO,disablescroll
|
||||
use VIDEO,clearscreen
|
||||
use VIDEO.LIB,print
|
||||
use VIDEO.LIB,showhex
|
||||
use VIDEO.LIB,showchar
|
||||
endi
|
||||
|
||||
|
||||
|
||||
|
|