Merge branch 'release/1.3.0'

This commit is contained in:
Nicolas Hordé 2007-03-13 20:41:27 +00:00
commit c803d5fa41
52 changed files with 5809 additions and 5194 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -1,9 +1,5 @@
all: all:
cd commande cd lib
make
cd ..
cd programs
make make
cd .. cd ..
@ -11,31 +7,16 @@ all:
make make
cd .. cd ..
cd contribs
make
cd ..
cd install cd install
make make
cd .. cd ..
copy: copy:
make all make all
copy commande\*.exe ..\data
copy programs\*.exe ..\data
copy programs\*.rip ..\data
copy noyau\*.sys ..\data
rem copy noyau\*.bin ..\data
copy contribs\*.exe ..\data
copy install\*.com ..\
make clean
clean: clean:
cd commande cd lib
make clean
cd ..
cd programs
make clean make clean
cd .. cd ..
@ -43,10 +24,6 @@ clean:
make clean make clean
cd .. cd ..
cd contribs
make clean
cd ..
cd install cd install
make clean make clean
cd .. cd ..

View File

@ -1,6 +1,7 @@
![logo](https://github.com/dahut87/cos2000v1/raw/master/Graphisme/logo.png) ![logo](https://github.com/dahut87/cos2000v1/raw/master/Graphisme/logo.png)
## Copies d'écran de COS2000 ## 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/chargement.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/dir.jpg)
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/editeur.jpg) ![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/editeur.jpg)

View File

@ -3,40 +3,18 @@
smart smart
.code .code
org 0100h org 0h
include ..\include\fat.h include ..\include\fat.h
include ..\include\mem.h include ..\include\mem.h
include ..\include\divers.h include ..\include\divers.h
start: start:
push cs header exe <,1,0,,,offset imports,,>
push cs
push cs
push cs
pop ds
pop es
pop fs
pop gs
mov ah,21
mov cl,7
int 47h
mov ah,3 realstart:
int 48h push offset msginit
mov ax,0002 call [print]
int 47h
mov ah,2
int 47h
mov ah,6
int 47h
mov ah,6
int 47h
mov ah,42
int 47h
mov ah,13
mov si,offset msg
int 47h
xor bp,bp xor bp,bp
mov dl,' ' mov dl,' '
call setdelimiter0 call setdelimiter0
@ -49,11 +27,8 @@ noret:
mov ah,16 mov ah,16
mov di,offset dir mov di,offset dir
int 48h int 48h
mov si,di push offset prompt
mov ah,13 call [print]
int 47h
mov si,offset prompt
int 47h
mov di,offset buffer mov di,offset buffer
waitchar: waitchar:
mov ax,0 mov ax,0
@ -63,9 +38,8 @@ waitchar:
jne norr jne norr
cmp bp,0 cmp bp,0
je waitchar je waitchar
mov ah,13 push word ptr cs: [bp-8]
mov si,cs:[bp-8] call [print]
int 47h
push cs push cs
pop es pop es
call copy0 call copy0
@ -73,7 +47,7 @@ waitchar:
add di,cx add di,cx
jmp waitchar jmp waitchar
norr: norr:
cmp al,0Dh ;entrée cmp al,0dh ;entrée
je entere je entere
cmp al,08h ;backspace cmp al,08h ;backspace
je backspace je backspace
@ -85,14 +59,13 @@ norr:
je waitchar je waitchar
mov [di],al mov [di],al
inc di inc di
mov dl,al push ax
mov ah,7 call [showchar]
int 47h
jmp waitchar jmp waitchar
escape: escape:
cmp di,offset buffer cmp di,offset buffer
je waitchar je waitchar
mov ah,18h mov ah,24
int 47h int 47h
mov dx,offset buffer mov dx,offset buffer
mov cx,di mov cx,di
@ -100,20 +73,21 @@ escape:
js waitchar js waitchar
je waitchar je waitchar
sub bh,cl sub bh,cl
mov ah,19h mov ah,25
int 47h int 47h
mov di,offset buffer mov di,offset buffer
mov byte ptr [di],0 mov byte ptr [di],0
backspace: backspace:
cmp di,offset buffer cmp di,offset buffer
je waitchar je waitchar
mov ah,18h mov ah,24
int 47h int 47h
dec bh dec bh
mov dl,' ' mov ah,25
mov ah,0Eh
int 47h int 47h
mov ah,19h push ' '
call [showchar]
mov ah,25
int 47h int 47h
dec di dec di
mov byte ptr [di],0 mov byte ptr [di],0
@ -147,7 +121,7 @@ tre:
jb noadd jb noadd
mov bp,dx mov bp,dx
mov ax,bx mov ax,bx
noadd: noadd:
call cmpstr0 call cmpstr0
jne tre jne tre
mov si,offset buffer mov si,offset buffer
@ -187,57 +161,58 @@ noaddext:
xor bp,bp xor bp,bp
jmp replay jmp replay
reallyerror: reallyerror:
mov ah,13 push offset error_syntax
mov si,offset Error_Syntax call [print]
int 47h push word ptr cs: [bp-8]
mov ah,13 call [print]
mov si,cs:[bp-8]
int 47h
jmp replay jmp replay
errorprec: errorprec:
mov ah,13 push offset derror
mov si,offset derror call [print]
int 47h
jmp replay jmp replay
Code_Exit: code_exit:
pop ax pop ax
db 0CBh retf
Code_Version: code_version:
mov ah,13 push offset version_text
mov si,offset Version_Text call [print]
int 47h
ret ret
Version_Text db 'Cos 2000 version 1.2Fr par Nico',0 version_text db 'Cos 2000 version 1.4Fr par \c04MrNop',0
Code_Cls: code_cls:
mov ah,2 mov ah,2
int 47h int 47h
ret ret
Code_Reboot: code_reboot:
push 0FFFFh push 0ffffh
push 00000h push 00000h
db 0CBH retf
Code_Command: code_command:
push offset def
call [print]
mov bx,offset commands mov bx,offset commands
showalls: showalls:
mov si,[bx]
add bx,8 add bx,8
cmp si,0 cmp word ptr [bx],0
je endoff je endoff
mov ah,13 push word ptr [bx+4]
int 47h push word ptr [bx+6]
mov ah,6 push word ptr [bx]
int 47h push offset commandes
call [print]
jmp showalls jmp showalls
endoff: endoff:
ret ret
Code_Mode: def db 'Liste des commandes internes\l\l',0
commandes db '%0 \h10:\h12%0 \h70%0\l',0
code_mode:
mov cx,0 mov cx,0
call gettypeditem0 call gettypeditem0
mov ah,0 mov ah,0
@ -248,238 +223,171 @@ Code_Mode:
int 47h int 47h
ret ret
present db 'Le volume insere est nomme ',0 code_dir:
present2 db ', Numero de serie : ',0 mov ah,12
nomdisque db 13 dup (0) int 48h
Code_Dir: push edx
mov si,offset present mov ah,11
mov ah,13 mov di,offset nomdisque
int 47h int 48h
mov ah,11 push di
mov di,offset nomdisque push offset present
int 48h call [print]
mov si,di xor bp,bp
mov ah,13 mov di,offset bufferentry
int 47h mov ah,7
mov si,offset present2 int 48h
mov ah,13 jc nofiles
int 47h
mov ah,12
int 48h
mov ah,10
mov cx,32
int 47h
mov ah,6
int 47h
mov ah,6
int 47h
xor ebp,ebp
mov di,offset bufferentry
mov si,di
mov ah,7
int 48h
jc nofiles
go: go:
mov ah,46 push word ptr [di+entries.fileattr]
int 47h push dword ptr [di+entries.filesize]
mov ah,05 push word ptr [di+entries.filetime]
int 47h push word ptr [di+entries.filedate]
int 47h push word ptr [di+entries.filetimecrea]
int 47h push word ptr [di+entries.filedatecrea]
mov ah,44 push di
mov dx,[si+Entries.FileDateCrea] push offset line
int 47h call [print]
mov ah,05 inc bp
int 47h mov ah,8
int 47h int 48h
int 47h jnc go
mov ah,45
mov dx,[si+Entries.FileTimeCrea]
int 47h
mov ah,05
int 47h
int 47h
int 47h
mov ah,44
mov dx,[si+Entries.FileDate]
int 47h
mov ah,05
int 47h
int 47h
int 47h
mov ah,45
mov dx,[si+Entries.FileTime]
int 47h
mov ah,05
int 47h
int 47h
int 47h
mov ah,48
mov edx,[si+Entries.FileSize]
int 47h
mov ah,05
int 47h
int 47h
int 47h
mov ah,47
mov dl,[si+Entries.FileAttr]
int 47h
mov ah,6
int 47h
inc bp
mov ah,8
int 48h
jnc go
nofiles: nofiles:
mov edx,ebp push ebp
mov ah,6 push offset filess
int 47h call [print]
mov ah,8 ret
int 47h
mov si,offset filess nomdisque db 13 dup (0)
mov ah,13 bufferentry db 512 dup (0)
int 47h present db '\c02Le volume insere est nomme %0, Numero de serie : %hD\l\l',0
ret
bufferentry db 32 dup (0) line db '\c07%n %d %t %d %t %z %a\l',0
filess db ' Fichier(s) au total',0 filess db '\l\l\c02%u Fichier(s) au total\l',0
changing db 'Changement de repertoire vers ',0
code_cd: code_cd:
mov cx,0 mov cx,0
call gettypeditem0 call gettypeditem0
push si push di
mov si,offset changing push offset changing
mov ah,13 call [print]
int 47h
pop si
int 47h
mov ah,6
int 47h
mov si,di mov si,di
mov ah,13 mov ah,13
int 48h int 48h
jnc okchange jnc okchange
mov si,offset errorchanging push offset errorchanging
mov ah,13 call [print]
int 47h
okchange: okchange:
ret ret
errorchanging db 'Impossible d''atteindre ce dossier',0
changing db 'Changement de repertoire vers %0\l',0
errorchanging db '\c04Impossible d''atteindre ce dossier',0
code_kill:
mov cx,0
call gettypeditem0
push di
push offset killing
call [print]
mov si,di
mov ah,5
int 49h
jc nochanged
mov ah,1
int 49h
jnc okchanged
nochanged:
push offset errorkilling
call [print]
okchanged:
ret
killing db 'Fermeture du processus %0\l',0
errorkilling db '\c04Impossible de fermer ce processus',0
code_refresh: code_refresh:
mov ah,3 mov ah,3
int 48h int 48h
jnc okrefresh jnc okrefresh
mov si,offset errorrefreshing push offset errorrefreshing
mov ah,13 call [print]
int 47h ret
ret okrefresh:
okrefresh: mov ah,12
mov si,offset present int 48h
mov ah,13 push edx
int 47h mov ah,11
mov ah,11 mov di,offset nomdisque
mov di,offset nomdisque int 48h
int 48h push di
mov si,di push offset present
mov ah,13 call [print]
int 47h
mov si,offset present2
mov ah,13
int 47h
mov ah,12
int 48h
mov ah,10
mov cx,32
int 47h
mov ah,6
int 47h
ret ret
errorrefreshing db 'Impossible de lire le support',0
extcom db '.COM',0 errorrefreshing db '\c04Impossible de lire le support',0
extcom db '.CE',0
Code_Mem: code_mem:
mov si,offset msgs push offset msg
mov ah,13 call [print]
int 47h xor ebx,ebx
mov ah,6 xor cx,cx
int 47h
mov ah,6
int 47h
mov si,offset menu
mov ah,13
int 47h
mov ah,6
int 47h
mov ah,18h
int 47h
xor cx,cx
listmcb: listmcb:
mov ah,4 mov ah,4
int 49h int 49h
jc fino jc fino
inc cx inc cx
mov ah,18h ;placement mémoire
int 47h mov dx,gs
push gs inc dx
pop ds inc dx
mov bh,0 push edx
mov si,MB.Names ;parent
mov ah,14h cmp gs: [mb.reference],0
int 47h jne next
mov bh,15 push cs
xor edx,edx push offset none
mov dx,ds:[MB.Sizes] add bx,gs:[mb.sizes]
shl edx,4 jmp suitemn
mov ah,0Fh
int 47h
mov bh,24
cmp ds:[MB.IsResident],true
push cs
pop ds
jne notresident
mov si,offset resident
mov ah,14h
int 47h
jmp suitelistmcb
notresident:
mov si,offset nonresident
mov ah,14h
int 47h
suitelistmcb:
mov bh,30
cmp gs:[MB.Reference],0
je next
cmp gs:[MB.Reference],1000h
jb next
mov ax,gs:[MB.Reference]
dec ax
dec ax
mov ds,ax
mov si,MB.Names
mov ah,14h
int 47h
next: next:
mov bh,46 mov dx,gs: [mb.reference]
xor edx,edx dec dx
mov dx,gs dec dx
inc dx push dx
inc dx push offset mb.names
push cx suitemn:
mov cx,16 ;Resident
mov ah,11h cmp gs: [mb.isresident],true
int 47h jne notresident
mov ah,6h push offset resident
int 47h jmp suitelistmcb
pop cx notresident:
jmp listmcb push offset nonresident
suitelistmcb:
;taille memoire
xor edx,edx
mov dx,gs: [mb.sizes]
shl edx,4
push 6
push edx
;nom
push gs
push offset mb.names
push offset line2
call [print]
jmp listmcb
fino: fino:
ret shl ebx,4
resident db 'oui',0 push ebx
nonresident db 'non',0 push offset fin
msgs db 'Plan de la memoire',0 call [print]
menu db 'Nom Taille Res Parent Mem',0 ret
resident db "oui",0
nonresident db "non",0
line2 db "%0P\h15%w\h24%0\h30%0P\h46%hW\l",0
fin db "\l\l\c02%u octets de memoire disponible\l",0
msg db "Plan de la memoire\l\lNom Taille Res Parent Mem\l",0
none db ".",0
;converti le jeux scancode/ascii en fr ax->ax ;converti le jeux scancode/ascii en fr ax->ax
@ -487,13 +395,13 @@ convertfr:
push dx si push dx si
mov si,offset fr mov si,offset fr
searchtouch: searchtouch:
mov dx,cs:[si] mov dx,cs: [si]
cmp dx,0 cmp dx,0
je endofconv je endofconv
add si,4 add si,4
cmp dx,ax cmp dx,ax
jne searchtouch jne searchtouch
mov ax,cs:[si-2] mov ax,cs: [si-2]
endofconv: endofconv:
pop dx si pop dx si
ret ret
@ -550,85 +458,85 @@ fr: db '1', 02, '&', 02
db '\', 86, '<', 86 db '\', 86, '<', 86
db '|', 86, '>', 86 db '|', 86, '>', 86
db 00, 79h, '~', 03 db 00, 79h, '~', 03
db 00, 7Ah, '#', 04 db 00, 7ah, '#', 04
db 00, 7Bh, '{', 05 db 00, 7bh, '{', 05
db 00, 7Ch, '[', 06 db 00, 7ch, '[', 06
db 00, 7Dh, '|', 07 db 00, 7dh, '|', 07
db 00, 7Eh, '`', 08 db 00, 7eh, '`', 08
db 00, 7Fh, '\', 09 db 00, 7fh, '\', 09
db 00, 80h, '^', 10 db 00, 80h, '^', 10
db 00, 81h, '@', 11 db 00, 81h, '@', 11
db 00, 82h, ']', 12 db 00, 82h, ']', 12
db 00, 83h, '}', 13 db 00, 83h, '}', 13
db 00, 00, 00, 00 db 00, 00, 00, 00
commands dw str_exit ,code_exit ,syn_exit ,help_exit
dw str_version,code_version,syn_version,help_version
dw str_cls ,code_cls ,syn_cls ,help_cls
dw str_reboot ,code_reboot ,syn_reboot ,help_reboot
dw str_command,code_command,syn_command,help_command
dw str_mode ,code_mode ,syn_mode ,help_mode
dw str_dir ,code_dir ,syn_dir ,help_dir
dw str_refresh ,code_refresh ,syn_refresh ,help_refresh
dw str_cd ,code_cd ,syn_cd ,help_cd
dw str_mem ,code_mem ,syn_mem ,help_mem
dw str_kill ,code_kill ,syn_kill ,help_kill
commands dw Str_Exit ,Code_Exit ,Syn_Exit ,Help_Exit
dw Str_Version,Code_Version,Syn_Version,Help_Version
dw Str_Cls ,Code_Cls ,Syn_Cls ,Help_Cls
dw Str_Reboot ,Code_Reboot ,Syn_Reboot ,Help_Reboot
dw Str_Command,Code_Command,Syn_Command,Help_Command
dw Str_Mode ,Code_Mode ,Syn_Mode ,Help_Mode
dw Str_Dir ,Code_Dir ,Syn_Dir ,Help_Dir
dw Str_refresh ,Code_refresh ,Syn_refresh ,Help_refresh
dw Str_cd ,Code_cd ,Syn_cd ,Help_cd
dw Str_Mem ,Code_Mem ,Syn_Mem ,Help_Mem
dw 0 dw 0
Str_Exit db 'QUIT',0 str_exit db 'QUIT',0
Str_Version db 'VERS',0 str_version db 'VERS',0
Str_Cls db 'CLEAR',0 str_cls db 'CLEAR',0
Str_Reboot db 'REBOOT',0 str_reboot db 'REBOOT',0
Str_Command db 'CMDS',0 str_command db 'CMDS',0
Str_Mode db 'MODE',0 str_mode db 'MODE',0
Str_Dir db 'DIR',0 str_dir db 'DIR',0
Str_refresh db 'DISK',0 str_refresh db 'DISK',0
Str_cd db 'CD',0 str_cd db 'CD',0
Str_Mem db 'MEM',0 str_mem db 'MEM',0
Syn_Exit db 0 str_kill db 'KILL',0
Syn_Version db 0
Syn_Cls db 0
Syn_Reboot db 0
Syn_Command db 0
Syn_Mode db 'FFH',0
Syn_Dir db 0
Syn_refresh db 0
Syn_cd db '@',0
Syn_Mem db 0
Help_Exit db 0
Help_Version db 0
Help_Cls db 0
Help_Reboot db 0
Help_Command db 0
Help_Mode db 0
Help_Dir db 0
Help_refresh db 0
Help_cd db 0
Help_Mem db 0
derror db 'Erreur de Syntaxe !',0
Error_Syntax db 'La commande ou l''executable n''existe pas ! F1 pour ',0
prompt db '>',0
msg db 'Interpreteur de commande COS V1.8',0
include str0.asm syn_exit db 0
syn_version db 0
syn_cls db 0
syn_reboot db 0
syn_command db 0
syn_mode db 'FFH',0
syn_dir db 0
syn_refresh db 0
syn_cd db '@',0
syn_mem db 0
syn_kill db '@',0
help_exit db 'Permet de quitter l''interpreteur',0
help_version db 'Affiche la version de COS',0
help_cls db 'Efface l''ecran',0
help_reboot db 'Redemarre l''ordinateur',0
help_command db 'Affiche le detail des commandes',0
help_mode db 'Modifie le mode video en cours',0
help_dir db 'Affiche le contenu du repertoire courant',0
help_refresh db 'Lit le support disquette insere',0
help_cd db 'Change le repertoire courant',0
help_mem db 'Affiche le plan de la memoire',0
help_kill db 'Termine le processus cible',0
derror db '\c04Erreur de Syntaxe !',0
error_syntax db '\c04La commande ou l''executable n''existe pas ! F1 pour ',0
prompt db '\c07>',0
msginit db '\m02\e\c07\l\lInterpreteur de commande COS V1.9\lSous license \c05GPL\c07 - Ecrit par \c04MrNop\l\c07Utilisez la commande CMDS pour connaitres les commandes disponibles\l',0
include str0.asm
dir db 32 dup (0) dir db 32 dup (0)
buffer db 256 dup (0) buffer db 128 dup (0)
buffer2 db 256 dup (0) buffer2 db 128 dup (0)
imports:
db "VIDEO.LIB::print",0
print dd 0
db "VIDEO.LIB::showhex",0
showhex dd 0
db "VIDEO.LIB::showchar",0
showchar dd 0
dw 0
end start end start

20
include/cpu.h Normal file
View File

@ -0,0 +1,20 @@
struc cpu
vendor db 13 dup(0) ;Chaine 0 du fabriquant
names db 32 dup(0)
stepping db 0
models db 0
family db 0
types db 0
emodels db 0
efamily db 0
mmx db 0
mmx2 db 0
sse db 0
sse2 db 0
sse3 db 0
fpu db 0
now3d db 0
now3d2 db 0
htt db 0
apic db 0
ends cpu

View File

@ -1,2 +1,2 @@
True equ 1 true equ 1
False equ 0 false equ 0

View File

@ -1,58 +1,52 @@
Free equ 0 struc dpt
True equ 1 steprate&headunload db 0DFh ;Vitesse de progression & monte de la tˆte
False equ 0 dmaflag&headload db 002h ;Etat Dma et temps de descente de la tˆte
delaymotoroff db 025h ;Temps avant extinction moteur
bytepersector db 002h ;Taille des secteurs
sectorpertracks db 000h ;Nombre de secteur par piste
intersectgaplength db 01Bh ;Taille du GAP3 en lecture/criture
datalength db 0FFh ;Longueur du transfert de donnes
intersectgaplengthf db 054h ;Taille du GAP3 en formatage
formatbyte db 0F6h ;Octet de formatage
headsettlingtime db 000h ;Temps de repos des tˆtes
delaymotornormspeed db 008h ;Temps de monte en vitesse du moteur
ends dpt
DPT struc struc entries
StepRate&HeadUnload db 0DFh ;Vitesse de progression & monte de la tˆte filename db 8 dup (0)
DMAFlag&HeadLoad db 002h ;Etat Dma et temps de descente de la tˆte filext db 3 dup (0)
DelayMotorOff db 025h ;Temps avant extinction moteur fileattr db 0
BytePerSector db 002h ;Taille des secteurs filereserved db 0
SectorPerTracks db 000h ;Nombre de secteur par piste filetimecreams db 0 ;(*10 ms)
InterSectGapLength db 01Bh ;Taille du GAP3 en lecture/criture filetimecrea dw 0
DataLength db 0FFh ;Longueur du transfert de donnes filedatecrea dw 0
InterSectGapLengthF db 054h ;Taille du GAP3 en formatage filedateacc dw 0
FormatByte db 0F6h ;Octet de formatage filenotused dw 0
HeadSettlingTime db 000h ;Temps de repos des tˆtes filetime dw 0
DelayMotorNormSpeed db 008h ;Temps de monte en vitesse du moteur filedate dw 0
DPT ends filegroup dw 0
filesize dd 0
ends entries
Entries Struc struc bootinfo
FileName db 8 dup (0) vendor db 'COS2000A' ;Fabricant + n°série Formatage
FilExt db 3 dup (0) sectorsize dw 512 ;octet/secteur
FileAttr db 0 sectorspercluster db 1 ;secteur/cluster
FileReserved db 0 reservedsectors dw 1 ;secteur reserv
FileTimeCreaMs db 0 ;(*10 ms) fatsperdrive db 2 ;nb de copie de la FAT
FileTimeCrea dw 0 directorysize dw 224 ;taille rep racine
FileDateCrea dw 0 sectorsperdrive dw 2880 ;nb secteur du volume si < 32 még
FileDateAcc dw 0 mediadescriptor db 0F0h ;Descripteur de média
FileNotused dw 0 sectorsperfat dw 9 ;secteur/FAT
FileTime dw 0 sectorspertrack dw 18 ;secteur/piste
FileDate dw 0 headsperdrive dw 2 ;nb de tˆteb de lecture/écriture
FileGroup dw 0 hiddensectorsh dw 0 ;nombre de secteur cachs
FileSize dd 0 hiddensectorsl dw 0 ;
Entries Ends sectorperdisk2 dd 0 ;Nombre secteur du volume si > 32 Mo+20h ; the number of sectors
bootdrive db 0 ;Lecteur de dmarrage
BootSector Struc reservedfornt db 0 ;NA
jumper db 0,0,0 bootsign db 29h ;boot signature 29h
Vendor db 'COS2000A' ;Fabricant + n°série Formatage serialnumber dd 01020304h ;no de serie
SectorSize dw 512 ;octet/secteur drivename db 'COS2000 ' ;nom de volume
SectorsPerCluster db 1 ;secteur/cluster typeoffat db 'FAT16 ' ;FAT
ReservedSectors dw 1 ;secteur reserv ends bootinfo
FatsPerDrive db 2 ;nb de copie de la FAT
DirectorySize dw 224 ;taille rep racine
SectorsPerDrive dw 2880 ;nb secteur du volume si < 32 még
MédiaDescriptor db 0F0h ;Descripteur de média
SectorsPerFat dw 9 ;secteur/FAT
SectorsPerTrack dw 18 ;secteur/piste
HeadsPerDrive dw 2 ;nb de tˆteb de lecture/écriture
HiddenSectorsH dw 0 ;nombre de secteur cachs
HiddenSectorsL dw 0 ;
SectorPerDisk2 dd 0 ;Nombre secteur du volume si > 32 Mo+20h ; the number of sectors
BootDrive db 0 ;Lecteur de dmarrage
ReservedForNT db 0 ;NA
BootSign db 29h ;boot signature 29h
SerialNumber dd 01020304h ;no de serie
DriveName db 'COS2000 ' ;nom de volume
TypeOffAt db 'FAT16 ' ;FAT
bootcode db 453 dup (0)
BootSector ends

4
include/graphic.h Normal file
View File

@ -0,0 +1,4 @@
struc point
coordx db 0
coordy db 0
ends point

View File

@ -1,11 +1,32 @@
MB struc struc mb ;Bloc de mémoire
Check dw 'NH' check db "NH" ;signature du bloc de mémoire
IsNotLast db 0 isnotlast db 0 ;flag indiquant le dernier bloc
IsResident db 0 isresident db 0 ;flag indiquant que le bloc est resident
Reference dw 0 reference dw 0 ;pointeur vers le bloc parent
Sizes dw 0 sizes dw 0 ;taille du bloc en paragraphe de 16 octet
Names db 24 dup (0) names db 24 dup (0) ;nom du bloc
MB ends ends mb
Free equ 0 struc exe ;Executable COS
memorystart equ 1000h checks db "CE" ;signature de l'exe
major db 1 ;N° version
checksum dd 0 ;Checksum de l'exe
compressed db 0 ;a 1 si compressé par RLE
exports dw 0 ;importation de fonctions
imports dw 0 ;exportation de fonctions
sections dw 0 ;sections des blocs mémoire
starting dw 15
ends exe
struc descriptor
limit_low dw 0
base_low dw 0
base_middle db 0
dpltype db 0
limit_high db 0
base_high db 0
ends descriptor
free equ 0 ;Reference quand libre
memorystart equ 0052h ;premier bloc de la mémoire

View File

@ -1,4 +1,4 @@
pci Struc struc pcidata
vendor dw 0 ;vendor ID (read-only), FFFFh returned if requested device non-existent vendor dw 0 ;vendor ID (read-only), FFFFh returned if requested device non-existent
device dw 0 ;device ID (read-only) device dw 0 ;device ID (read-only)
command dw 0 ;command register command dw 0 ;command register
@ -16,4 +16,19 @@ typed db 0 ;header type
;02h PCI-to-CardBus bridge ;02h PCI-to-CardBus bridge
;bit 7: multi-function device ;bit 7: multi-function device
result db 0 ;Built-In Self-Test result result db 0 ;Built-In Self-Test result
pci Ends ends pcidata
struc pciinf
version_major db 0
version_minor db 0
types db 0
maxbus db 0
ends pciinf
multifunction equ 80h
othercard equ 00h
pci2pcibridge equ 01h
pci2pcicard equ 02h
config1addr equ 0CF8h
config1data equ 0CFCh

View File

@ -1,16 +1,20 @@
lnk_boot = tlink /x asm= lzasm
asm= tasm /t/m5/zi lnk= elink
lnk= tlink /x/t
all: setup.com all: setup.com
setup.com: setup.asm setup.com: setup.obj
$(asm) setup $(lnk) setup.obj setup.com
$(lnk) setup
setup.obj:
$(asm) setup.asm
clean: clean:
del *.obj del *.obj
del *.exe del *.exe
del *.bak
del *.lib
del *.com del *.com
del *.bin
del *.sys del *.sys
del *.err del *.err

View File

@ -1,20 +1,21 @@
.model tiny model tiny,stdcall
.486 p486
smart locals
.code jumps
codeseg
option procalign:byte
org 0100h org 0100h
ent equ 32h ent equ 32h
start: jmp copycos
jmp CopyCOS
Message db 0Dh,0Ah,'COS 2000 V1.2Fr 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.1BetaFr programme d''installation',0Dh,0AH,'Inserez une disquette formatee et appuyez sur entre...',0Dh,0AH,'Attention le contenu de celle ci peut etre altere !!!',0Dh,0AH,'$'
Message2 db 0Dh,0AH,'Creation du secteur de demarrage...',0Dh,0Ah,'$' message2 db 0Dh,0AH,'Creation du secteur de demarrage...',0Dh,0Ah,'$'
Message3 db 0Dh,0AH,'Copie des fichiers systeme...',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,'$' errormsg db 0Dh,0AH,'Erreur d''installation, contactez moi a COS2000@MULTIMANIA.COM !',0Dh,0AH,'$'
Ok db 0Dh,0AH,'COS2000 a ete correctement installe, veuillez redemarrer votre PC',0Dh,0AH,'$' ok db 0Dh,0AH,'COS2000 a ete correctement installe, veuillez redemarrer votre PC',0Dh,0AH,'$'
files db '*.*',0 files db '*.*',0
boot db 'boot.bin',0 boot db 'boot.bin',0
dat db 'data',0 dat db 'data',0
@ -53,7 +54,7 @@ copycos:
mov dx,offset message3 mov dx,offset message3
int 21h int 21h
allfile: allfile:
mov byte ptr [offset dta+43],'$' mov [byte ptr offset dta+43],'$'
mov ah,9 mov ah,9
mov dx,offset dta+30 mov dx,offset dta+30
int 21h int 21h
@ -97,8 +98,8 @@ allfile:
push cs push cs
pop es pop es
mov di,offset dta+30-3 mov di,offset dta+30-3
mov word ptr [di],":a" mov [word ptr di],":a"
mov byte ptr [di+2],"\" mov [byte ptr di+2],"\"
xor cx,cx xor cx,cx
mov dx,di mov dx,di
int 21h int 21h
@ -146,7 +147,7 @@ allfile:
xor bx,bx xor bx,bx
int 13h int 13h
mov ah,09 mov ah,09
mov dx,offset Ok mov dx,offset ok
int 21h int 21h
xor ax,ax xor ax,ax
int 16h int 16h
@ -161,4 +162,3 @@ error:
int 16h int 16h
ret ret
end start

121
install/winNT gui/setup.bpr Normal file
View File

@ -0,0 +1,121 @@
<?xml version='1.0' encoding='utf-8' ?>
<!-- C++Builder XML Project -->
<PROJECT>
<MACROS>
<VERSION value="BCB.06.00"/>
<PROJECT value="setup.exe"/>
<OBJFILES value="setup.obj Unit1.obj"/>
<RESFILES value="setup.res"/>
<IDLFILES value=""/>
<IDLGENFILES value=""/>
<DEFFILE value=""/>
<RESDEPEN value="$(RESFILES) Unit1.dfm"/>
<LIBFILES value=""/>
<LIBRARIES value="rtl.lib vcl.lib"/>
<SPARELIBS value="vcl.lib rtl.lib"/>
<PACKAGES value="vcl.bpi rtl.bpi dbrtl.bpi adortl.bpi vcldb.bpi vclx.bpi bdertl.bpi
vcldbx.bpi ibxpress.bpi dsnap.bpi cds.bpi bdecds.bpi qrpt.bpi teeui.bpi
teedb.bpi tee.bpi dss.bpi teeqr.bpi visualclx.bpi visualdbclx.bpi
dsnapcrba.bpi dsnapcon.bpi bcbsmp.bpi vclie.bpi xmlrtl.bpi inet.bpi
inetdbbde.bpi inetdbxpress.bpi inetdb.bpi nmfast.bpi webdsnap.bpi
bcbie.bpi websnap.bpi soaprtl.bpi dclocx.bpi dbexpress.bpi dbxcds.bpi
indy.bpi bcb2kaxserver.bpi pop.bpi IcsBcb50.bpi bcbshlctrls.bpi"/>
<PATHCPP value=".;"/>
<PATHPAS value=".;"/>
<PATHRC value=".;"/>
<PATHASM value=".;"/>
<DEBUGLIBPATH value="$(BCB)\lib\debug"/>
<RELEASELIBPATH value="$(BCB)\lib\release"/>
<LINKER value="ilink32"/>
<USERDEFINES value=""/>
<SYSDEFINES value="_RTLDLL;NO_STRICT"/>
<MAINSOURCE value="setup.cpp"/>
<INCLUDEPATH value="E:\CBuilder6\Projects;&quot;C:\Documents and Settings\niko\Bureau\Nouveau dossier&quot;;$(BCB)\include;$(BCB)\include\vcl"/>
<LIBPATH value="E:\CBuilder6\Projects;&quot;C:\Documents and Settings\niko\Bureau\Nouveau dossier&quot;;$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib"/>
<WARNINGS value="-w-par"/>
<OTHERFILES value=""/>
</MACROS>
<OPTIONS>
<IDLCFLAGS value="-IE:\CBuilder6\Projects
-I&quot;C:\Documents and Settings\niko\Bureau\Nouveau dossier&quot; -I$(BCB)\include
-I$(BCB)\include\vcl -src_suffix cpp -boa"/>
<CFLAG1 value="-O2 -H=$(BCB)\lib\vcl60.csm -Hc -w- -Vx -Ve -X- -a8 -b- -k- -vi -c -tW -tWM"/>
<PFLAGS value="-$Y- -$L- -$D- -$A8 -v -JPHNE -M"/>
<RFLAGS value=""/>
<AFLAGS value="/mx /w2 /zn"/>
<LFLAGS value="-D&quot;&quot; -aa -Tpe -x -Gn"/>
<OTHERFILES value=""/>
</OPTIONS>
<LINKER>
<ALLOBJ value="c0w32.obj Memmgr.Lib sysinit.obj $(OBJFILES)"/>
<ALLRES value="$(RESFILES)"/>
<ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib"/>
<OTHERFILES value=""/>
</LINKER>
<FILELIST>
<FILE FILENAME="setup.res" FORMNAME="" UNITNAME="setup.res" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/>
<FILE FILENAME="setup.cpp" FORMNAME="" UNITNAME="setup" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
<FILE FILENAME="Unit1.cpp" FORMNAME="Form1" UNITNAME="Unit1" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/>
</FILELIST>
<BUILDTOOLS>
</BUILDTOOLS>
<IDEOPTIONS>
[Version Info]
IncludeVerInfo=0
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1036
CodePage=1252
[Version Info Keys]
CompanyName=
FileDescription=
FileVersion=1.0.0.0
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=1.0.0.0
Comments=
[Debugging]
DebugSourceDirs=$(BCB)\source\vcl
[Parameters]
RunParams=
Launcher=
UseLauncher=0
DebugCWD=
HostApplication=
RemoteHost=
RemotePath=
RemoteLauncher=
RemoteCWD=
RemoteDebug=0
[Compiler]
ShowInfoMsgs=0
LinkDebugVcl=0
LinkCGLIB=0
[CORBA]
AddServerUnit=1
AddClientUnit=1
PrecompiledHeaders=1
[Language]
ActiveLang=
ProjectLang=
RootDir=
</IDEOPTIONS>
</PROJECT>

View File

@ -0,0 +1,33 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------

BIN
install/winNT gui/setup.res Normal file

Binary file not shown.

BIN
install/winNT gui/setup.tds Normal file

Binary file not shown.

166
install/winNT gui/unit1.cpp Normal file
View File

@ -0,0 +1,166 @@
//---------------------------------------------------------------------------
#include <vcl.h>
#include <winioctl.h>
#include <io.h>
#include <fcntl.h>
#include <dir.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hDrive;
DISK_GEOMETRY dg_flop_geom;
AnsiString lecteur="b:";
AnsiString device="\\\\.\\"+lecteur;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
char * GetLastErrorString(void)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf, 0, NULL);
return (char *)lpMsgBuf;
}
//---------------------------------------------------------------------------
ShowMessages(AnsiString msg)
{
Form1->Memo1->Lines->Add(msg);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
DWORD dwNotUsed;
DWORD error=0;
hDrive = CreateFile(device.c_str(), GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
ShowMessages("Ouverture du peripherique "+lecteur);
if (hDrive == INVALID_HANDLE_VALUE) {
ShowMessages("Erreur : "+AnsiString(GetLastErrorString()));
error=1;
}
if(error!=1&&ShowMessages("Determination de la geometrie ")&&DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL,0, &dg_flop_geom, sizeof(dg_flop_geom),&dwNotUsed, NULL) == FALSE) {
ShowMessages("Erreur : "+AnsiString(GetLastErrorString()));
error=1;
}
if(error!=1&&(dg_flop_geom.MediaType==FixedMedia||dg_flop_geom.MediaType==RemovableMedia||dg_flop_geom.MediaType==Unknown))
{
ShowMessages("Erreur : Ceci n'est pas une disquette !");
error=1;
}
if (error!=1&&ShowMessages("Positionnement sur le secteur 0")&&SetFilePointer(hDrive, 0, NULL, FILE_BEGIN) == -1) {
ShowMessages("Erreur : "+AnsiString(GetLastErrorString()));
error=1;
}
if (error!=1)
{
drive->Caption=lecteur.UpperCase();
track->Caption=IntToStr(dg_flop_geom.Cylinders.LowPart);
sector->Caption=IntToStr(dg_flop_geom.SectorsPerTrack);
size->Caption=IntToStr(dg_flop_geom.BytesPerSector);
head->Caption=IntToStr(dg_flop_geom.TracksPerCylinder);
allsize->Caption=IntToStr(dg_flop_geom.BytesPerSector*dg_flop_geom.Cylinders.LowPart*dg_flop_geom.SectorsPerTrack*dg_flop_geom.TracksPerCylinder);
allsector->Caption=IntToStr(dg_flop_geom.Cylinders.LowPart*dg_flop_geom.SectorsPerTrack*dg_flop_geom.TracksPerCylinder);
}
else
{
CloseHandle(hDrive);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (hDrive == NULL||dg_flop_geom.TracksPerCylinder>2||dg_flop_geom.TracksPerCylinder==0)
{
ShowMessages("Aucun support valide detecté !");
}
else
{
int fdboot;
DWORD error=0;
DWORD dwBsWritten;
char * buffer;
AnsiString bootfile="data/boot.bin";
ShowMessages("Allocation de mémoire ");
buffer = (char *)malloc(dg_flop_geom.BytesPerSector);
ShowMessages("Ouverture et installation du fichier de boot "+bootfile);
if ((fdboot = _rtl_open(bootfile.c_str(),O_RDONLY | O_BINARY)) == -1 )
{
ShowMessages("Erreur : Fichier de boot introuvable");
error=1;
}
if (error!=1&&_read(fdboot, buffer, dg_flop_geom.BytesPerSector)!= dg_flop_geom.BytesPerSector)
{
ShowMessages("Erreur : Fichier de boot de taille incorrecte !");
error=1;
}
if (error!=1&&WriteFile(hDrive, buffer, dg_flop_geom.BytesPerSector, &dwBsWritten, NULL) == 0)
{
ShowMessages("Ecriture impossible sur le secteur de boot !");
error=1;
}
_rtl_close(fdboot);
if (error!=1)
{
struct ffblk files;
int done;
int number=0;
ShowMessages("Détermination des fichiers a copier");
done = findfirst("data/*.*",&files,0);
while (!done)
{
number++;
done = findnext(&files);
}
install->Max=number;
install->Min=0;
install->Position=0;
ShowMessages("Copie des fichiers de cos2000");
done = findfirst("data/*.*",&files,0);
while (!done)
{
ShowMessages(AnsiString(files.ff_name).LowerCase());
if (!CopyFile((AnsiString("data/")+AnsiString(files.ff_name)).c_str(),(lecteur+"\\"+AnsiString(files.ff_name)).c_str(),false))
{
ShowMessages("Erreur : fichier impossible a copier"+AnsiString(GetLastErrorString()));
error=1;
break;
}
done = findnext(&files);
install->Position++;
}
if (!error)
{
ShowMessages("Installation terminée !");
Button2->Visible=false;
Button1->Visible=false;
Button3->Visible=true;
}
else
ShowMessages("Installation echoué !");
}
free(buffer);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
CloseHandle(hDrive);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------

BIN
install/winNT gui/unit1.ddp Normal file

Binary file not shown.

184
install/winNT gui/unit1.dfm Normal file
View File

@ -0,0 +1,184 @@
object Form1: TForm1
Left = 418
Top = 273
Width = 599
Height = 371
Caption = 'Installation de COS2000'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
OnClose = FormClose
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 288
Top = 304
Width = 75
Height = 25
Caption = 'installer...'
TabOrder = 0
OnClick = Button1Click
end
object install: TProgressBar
Left = 16
Top = 264
Width = 553
Height = 25
Min = 0
Max = 100
TabOrder = 1
end
object Button2: TButton
Left = 208
Top = 304
Width = 75
Height = 25
Caption = 'support'
TabOrder = 2
OnClick = FormShow
end
object Memo1: TMemo
Left = 192
Top = 24
Width = 377
Height = 225
ReadOnly = True
TabOrder = 3
end
object GroupBox1: TGroupBox
Left = 16
Top = 120
Width = 161
Height = 129
Caption = 'G'#233'om'#233'trie'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
TabOrder = 4
object track: TLabel
Left = 96
Top = 60
Width = 31
Height = 13
Caption = 'Aucun'
end
object Label4: TLabel
Left = 24
Top = 60
Width = 34
Height = 13
Caption = 'Pistes :'
end
object Label5: TLabel
Left = 24
Top = 28
Width = 48
Height = 13
Caption = 'Secteurs :'
end
object sector: TLabel
Left = 96
Top = 28
Width = 31
Height = 13
Caption = 'Aucun'
end
object head: TLabel
Left = 96
Top = 44
Width = 31
Height = 13
Caption = 'Aucun'
end
object Label6: TLabel
Left = 24
Top = 44
Width = 33
Height = 13
Caption = 'Tetes :'
end
object Label8: TLabel
Left = 24
Top = 84
Width = 69
Height = 13
Caption = 'Taille secteur :'
end
object size: TLabel
Left = 96
Top = 84
Width = 31
Height = 13
Caption = 'Aucun'
end
end
object GroupBox2: TGroupBox
Left = 16
Top = 16
Width = 161
Height = 97
Caption = 'Support'
TabOrder = 5
object Label1: TLabel
Left = 24
Top = 24
Width = 42
Height = 13
Caption = 'Lecteur :'
end
object drive: TLabel
Left = 88
Top = 24
Width = 31
Height = 13
Caption = 'Aucun'
end
object Label2: TLabel
Left = 24
Top = 40
Width = 31
Height = 13
Caption = 'Taille :'
end
object allsize: TLabel
Left = 88
Top = 40
Width = 31
Height = 13
Caption = 'Aucun'
end
object Label3: TLabel
Left = 24
Top = 56
Width = 58
Height = 13
Caption = 'N'#176'secteurs :'
end
object allsector: TLabel
Left = 88
Top = 56
Width = 31
Height = 13
Caption = 'Aucun'
end
end
object Button3: TButton
Left = 248
Top = 304
Width = 75
Height = 25
Caption = 'Quitter'
TabOrder = 6
Visible = False
OnClick = Button3Click
end
end

47
install/winNT gui/unit1.h Normal file
View File

@ -0,0 +1,47 @@
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TProgressBar *install;
TButton *Button2;
TMemo *Memo1;
TGroupBox *GroupBox1;
TLabel *track;
TLabel *Label4;
TLabel *Label5;
TLabel *sector;
TLabel *head;
TLabel *Label6;
TLabel *Label8;
TLabel *size;
TGroupBox *GroupBox2;
TLabel *Label1;
TLabel *drive;
TLabel *Label2;
TLabel *allsize;
TLabel *Label3;
TLabel *allsector;
TButton *Button3;
void __fastcall FormShow(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall Button3Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

26
lib/MAKEFILE Normal file
View File

@ -0,0 +1,26 @@
asm= lzasm
lnk= elink
all: detect.lib video.lib
detect.lib: detect.obj
$(lnk) detect.obj detect.lib
video.lib: video.obj
$(lnk) video.obj video.lib
detect.obj:
$(asm) detect.asm
video.obj:
$(asm) video.asm
clean:
del *.obj
del *.exe
del *.bak
del *.lib
del *.com
del *.bin
del *.sys
del *.err

114
lib/bmp.asm Normal file
View File

@ -0,0 +1,114 @@
.model tiny
.486
smart
locals
.code
org 0h
include ..\include\mem.h
include ..\include\bmp.h
start:
header exe <,1,0,,,,offset exports,>
exports:
db "showbmp",0
dw showbmp
db "loadbmppalet",0
dw loadbmppalet
dw 0
;==========SHOWBMP=========
;Affiche le BMP pointée par DS:%0 en %1, %2
;<- DS:%0 BMP, %1 coordonnées X, %2 coordonnées Y
;->
;==========================
showbmp PROC FAR
ARG pointer:word, x:word, y:word=taille
push bp
mov bp,sp
push ax bx cx dx si di
mov si,[pointer]
cmp word ptr [si+BMP_file.BMP_FileType],"MB"
jne @@errorshowing
mov edi,[si+BMP_BitMapOffset]
add di,si
mov ah,8
xor ebx,ebx
mov ecx,[si+offset BMP_File.BMP_height]
mov edx,[si+offset BMP_File.BMP_width]
and dx,11111100b
cmp edx,[si+offset BMP_File.BMP_width]
jae @@noadjust
add dx,4
@@noadjust:
sub dx,[si+offset BMP_File.BMP_width]
@@bouclette:
mov al,[di]
push bx cx
add bx,[x]
add cx,[y]
int 47h
pop cx bx
inc bx
inc di
cmp ebx,[si+offset BMP_File.BMP_width]
jb @@bouclette
xor bx,bx
add di,dx
dec cx
cmp cx,0
jne @@bouclette
clc
pop di si dx cx bx ax
pop bp
retf taille
@@errorshowing:
stc
pop di si cx bx ax
pop bp
retf taille
showbmp ENDP
;==========LOADBMPPALET=========
;Charge la palette du BMP pointée par DS:%0
;-> DS:%0 BMP
;<-
;===============================
loadbmppalet PROC FAR
ARG pointer:word=taille
push bp
mov bp,sp
push ax bx cx dx si
mov si,[pointer]
mov bx,0400h+36h-4
mov cx,100h
mov dx, 3c8h
paletteload:
mov al, cl
dec al
out dx, al
inc dx
mov al,[bx+si+2]
shr al,2
out dx, al
mov al,[bx+si+1]
shr al,2
out dx, al
mov al,[bx+si]
shr al,2
out dx, al
sub bx,4
dec dx
dec cl
jnz paletteload
pop si dx cx bx ax
pop bp
retf taille
loadbmppalet ENDP
end start

772
lib/detect.asm Normal file
View File

@ -0,0 +1,772 @@
model tiny,stdcall
p586
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h"
include "..\include\cpu.h"
include "..\include\pci.h"
org 0h
header exe <"CE",1,0,0,offset exports,,,>
exports:
db "cpuinfo",0
dw cpuinfo
db "setinfo",0
dw setinfo
db "pciinfo",0
dw pciinfo
db "getpciclass",0
dw getpciclass
db "getpcisubclass",0
dw getpcisubclass
db "getcardinfo",0
dw getcardinfo
db "pcireadbyte",0
dw pcireadbyte
db "pcireadword",0
dw pcireadword
db "pcireaddword",0
dw pcireaddword
db "detectvmware",0
dw detectvmware
dd 0
PROC detectvmware FAR
USES eax,ebx,ecx,edx
mov eax,564D5868h
mov ebx,12345h
mov ecx,00Ah
mov edx,5658h
in ax,dx
cmp ebx,564D5868h
ret
endp detectvmware
;renvoie un pointer dx:ax vers la classe %0
PROC getpciclass FAR
ARG @class:word
USES di
mov di,[@class]
and di,0FFh
shl di,1
mov ax,[cs:offset classes+di]
mov dx,cs
ret
endp getpciclass
;renvoie un pointer dx:ax vers la sous-classe de %1 et de classe %0
PROC getpcisubclass FAR
ARG @class:word,@subclass:word
USES di
mov di,[@class]
and di,0FFh
shl di,1
mov di,[cs:offset classesd+di]
mov dx,[@subclass]
and dx,0FFh
cmp dx,80h
jne @@suiteac
mov ax,offset divers
jmp @@found
@@suiteac:
shl dx,1
add di,dx
mov ax,[cs:di]
@@found:
mov dx,cs
ret
endp getpcisubclass
divers db 'divers',0
classes:
dw offset class0
dw offset class1
dw offset class2
dw offset class3
dw offset class4
dw offset class5
dw offset class6
dw offset class7
dw offset class8
dw offset class9
dw offset class10
dw offset class11
dw offset class12
dw offset class13
dw offset class14
dw offset class15
dw offset class16
dw offset class17
class0 db 'ancien',0
class1 db 'stockage',0
class2 db 'reseau',0
class3 db 'affichage',0
class4 db 'multimedia',0
class5 db 'memoire',0
class6 db 'pont',0
class7 db 'communication',0
class8 db 'systeme',0
class9 db 'acquisition',0
class10 db 'dock',0
class11 db 'processeur',0
class12 db 'bus serie',0
class13 db 'sans fil',0
class14 db 'intelligent',0
class15 db 'satellite',0
class16 db 'cryptage',0
class17 db 'traitement signal',0
;Classes et sous classes
classesd:
dw offset class0d
dw offset class1d
dw offset class2d
dw offset class3d
dw offset class4d
dw offset class5d
dw offset class6d
dw offset class7d
dw offset class8d
dw offset class9d
dw offset class10d
dw offset class11d
dw offset class12d
dw offset class13d
dw offset class14d
dw offset class15d
dw offset class16d
dw offset class17d
class0d:
dw offset subclass00
dw offset subclass01
subclass00 db 'divers',0
subclass01 db 'vga',0
class1d:
dw offset subclass10
dw offset subclass11
dw offset subclass12
dw offset subclass13
dw offset subclass14
subclass10 db 'scsi',0
subclass11 db 'ide',0
subclass12 db 'disquette',0
subclass13 db 'ipi',0
subclass14 db 'raid',0
class2d:
dw offset subclass20
dw offset subclass21
dw offset subclass22
dw offset subclass23
dw offset subclass24
subclass20 db 'ethernet',0
subclass21 db 'token ring',0
subclass22 db 'fddi',0
subclass23 db 'atm',0
subclass24 db 'isdn',0
class3d:
dw offset subclass30
dw offset subclass31
dw offset subclass32
subclass30 db 'vga',0
subclass31 db 'xga',0
subclass32 db '3D',0
class4d:
dw offset subclass40
dw offset subclass41
dw offset subclass42
subclass40 db 'video',0
subclass41 db 'audio',0
subclass42 db 'telephonie',0
class5d:
dw offset subclass50
dw offset subclass51
subclass50 db 'ram',0
subclass51 db 'flash',0
class6d:
dw offset subclass60
dw offset subclass61
dw offset subclass62
dw offset subclass63
dw offset subclass64
dw offset subclass65
dw offset subclass66
dw offset subclass67
dw offset subclass68
subclass60 db 'hote',0
subclass61 db 'isa',0
subclass62 db 'eisa',0
subclass63 db 'mca',0
subclass64 db 'pci',0
subclass65 db 'pcmcia',0
subclass66 db 'nubus',0
subclass67 db 'cardbus',0
subclass68 db 'RACEway',0
class7d:
dw offset subclass70
dw offset subclass71
dw offset subclass72
dw offset subclass73
subclass70 db 'serie',0
subclass71 db 'parallele',0
subclass72 db 'serie multiport',0
subclass73 db 'modem',0
class8d:
dw offset subclass80
dw offset subclass81
dw offset subclass82
dw offset subclass83
dw offset subclass84
subclass80 db 'pic',0
subclass81 db 'dma',0
subclass82 db 'timer',0
subclass83 db 'rtc',0
subclass84 db 'hotplug',0
class9d:
dw offset subclass90
dw offset subclass91
dw offset subclass92
dw offset subclass93
dw offset subclass94
subclass90 db 'clavier',0
subclass91 db 'stylo',0
subclass92 db 'souris',0
subclass93 db 'scanner',0
subclass94 db 'joystick',0
class10d:
dw offset subclass100
subclass100 db 'station',0
class11d:
dw offset subclass110
dw offset subclass111
dw offset subclass112
dw offset subclass113
dw offset subclass114
subclass110 db '386',0
subclass111 db '486',0
subclass112 db 'pentium',0
subclass113 db 'alpha',0
subclass114 db 'coprocesseur',0
class12d:
dw offset subclass120
dw offset subclass121
dw offset subclass122
dw offset subclass123
dw offset subclass124
dw offset subclass125
subclass120 db 'firewire',0
subclass121 db 'access',0
subclass122 db 'ssa',0
subclass123 db 'usb',0
subclass124 db 'fibre',0
subclass125 db 'smbus',0
class13d:
dw offset subclass130
dw offset subclass131
dw offset subclass132
subclass130 db 'irda',0
subclass131 db 'ir',0
subclass132 db 'rf',0
class14d:
dw offset subclass140
subclass140 db 'IO arch',0
class15d:
dw offset subclass150
dw offset subclass151
dw offset subclass152
dw offset subclass153
subclass150 db 'tv',0
subclass151 db 'audio',0
subclass152 db 'voix',0
subclass153 db 'donnees',0
class16d:
dw offset subclass160
dw offset subclass161
subclass160 db 'reseau',0
subclass161 db 'jeux',0
class17d:
dw offset subclass170
subclass170 db 'dpio',0
;al=bus cl=deviceid ch=func es:di
PROC getcardinfo FAR
ARG @bus:word,@device:word,@function:word,@pointer:word
USES eax,bx,di
cmp [@function],0
je @@amultiorfirst
call pcireadbyte,[@bus],[@device],0,offset (pcidata).typed
and al,multifunction
cmp al,0
jne @@amultiorfirst
mov [word ptr di],0000h
jmp @@notexist
@@amultiorfirst:
xor bx,bx
mov di,[@pointer]
@@goinfos:
call pcireadword,[@bus],[@device],[@function],bx
inc bl
inc bl
cmp bl,2
ja @@notzarb
cmp ax,0FFFFh
je @@notexist
cmp ax,00000h
je @@notexist
@@notzarb:
mov [ds:di],ax
inc di
inc di
cmp bl,40h
jbe @@goinfos
clc
ret
@@notexist:
stc
ret
endp getcardinfo
;lit un octet du bus %0 device %1 function %2 n° %3 et le met en AL
PROC pcireadbyte FAR
ARG @bus:word,@device:word,@function:word,@pointer:word
USES bx,dx
mov al,[byte ptr @bus]
mov ah,80h
shl eax,16
mov ah,[byte ptr @device]
shl ah,3
or ah,[byte ptr @function]
mov bl,[byte ptr @pointer]
mov al,bl
and al,0fch
mov dx,config1addr
out dx,eax
mov dx,config1data
and bl,3
or dl,bl
in al,dx
ret
endp pcireadbyte
;lit 2 octet du bus %0 device %1 function %2 n° %3 et le met en AX
PROC pcireadword FAR
ARG @bus:word,@device:word,@function:word,@pointer:word
USES bx,dx
mov al,[byte ptr @bus]
mov ah,80h
shl eax,16
mov ah,[byte ptr @device]
shl ah,3
or ah,[byte ptr @function]
mov bl,[byte ptr @pointer]
mov al,bl
and al,0fch
mov dx,config1addr
out dx,eax
mov dx,config1data
and bl,3
or dl,bl
in ax,dx
ret
endp pcireadword
;lit 4 octet du bus %0 device %1 function %2 n° %3 et le met en EAX
PROC pcireaddword FAR
ARG @bus:word,@device:word,@function:word,@pointer:word
USES bx,dx
mov al,[byte ptr @bus]
mov ah,80h
shl eax,16
mov ah,[byte ptr @device]
shl ah,3
or ah,[byte ptr @function]
mov bl,[byte ptr @pointer]
mov al,bl
and al,0fch
mov dx,config1addr
out dx,eax
mov dx,config1data
and bl,3
or dl,bl
in eax,dx
ret
endp pcireaddword
;Prob avec str pci
;renvoie en %0 la structure pciinf carry if error
PROC pciinfo FAR
ARG @pointer:word
USES ax,bx,cx,edx,edi
mov ax,0B101h
xor edi,edi
mov edx," PCI"
int 1Ah
jc @@errorpci
cmp dx,04350h
jne @@errorpci
cmp ah,0
jne @@errorpci
mov di,[@pointer]
mov [(pciinf di).version_major],bh
mov [(pciinf di).version_minor],bl
mov [(pciinf di).types],al
mov [(pciinf di).maxbus],cl
clc
ret
@@errorpci:
stc
ret
endp pciinfo
;retourne en DS:%1 les set supporté du processeur par rapport a la struct %0
PROC setinfo FAR
ARG @pointer:word,@set:word
USES bx,si,di
mov di,[@set]
lea si,[ds:cpu.mmx]
add si,[@pointer]
mov bx,offset @@theset
@@set:
cmp [word ptr cs:bx],0FFFFh
je @@endofset
cmp [byte ptr si],1
jne @@nextset
push bx
mov bx,[cs:bx]
@@put:
mov al,[cs:bx]
cmp al,0
je @@enofput
mov [di],al
inc bx
inc di
jmp @@put
@@enofput:
pop bx
@@nextset:
inc bx
inc bx
inc si
jmp @@set
@@endofset:
mov [byte ptr di],0
ret
@@theset dw offset @@mmx
dw offset @@mmx2
dw offset @@sse
dw offset @@sse2
dw offset @@sse3
dw offset @@fpu
dw offset @@now3d
dw offset @@now3d2
dw offset @@htt
dw offset @@apic
dw 0FFFFh
@@mmx db "MMX ",0
@@mmx2 db "MMX2 ",0
@@now3d db "3dNow! ",0
@@now3d2 db "3dNow Extended! ",0
@@htt db "HyperThreading",0
@@sse db "SSE ",0
@@sse2 db "SSE2 ",0
@@sse3 db "SSE3 ",0
@@apic db "APIC ",0
@@fpu db "FPU ",0
endp setinfo
;retourne en DS:%0 les capacités du processeur
PROC cpuinfo FAR
ARG @pointer:word
USES eax,ebx,ecx,edx,si,di,ds,es
push ds
pop es
mov di,[@pointer]
mov al,0
mov cx,size cpu
cld
rep stosb
mov di,[@pointer]
call nocpuid ;Test si cpuid est dispo
je @@nocpuidatall
xor eax,eax
cpuid ;Fonction 0 de CPUID
mov [dword ptr (cpu di).vendor],ebx ;Vendeur sur 13 octets
mov [dword ptr (cpu di+4).vendor],edx
mov [dword ptr (cpu di+8).vendor],ecx
mov [byte ptr (cpu di+12).vendor],0
cmp eax,1
jb @@nofonc1
mov eax,1
cpuid ;Fonction 1 de CPUID
mov ebx,eax ;infos de model
and ebx,1111b
mov [(cpu di).stepping],bl
shr eax,4
mov ebx,eax
and ebx,1111b
mov [(cpu di).models],bl
shr eax,4
mov ebx,eax
and ebx,1111b
mov [(cpu di).family],bl
shr eax,4
mov ebx,eax
and ebx,11b
mov [(cpu di).types],bl
shr eax,2
mov ebx,eax
and ebx,1111b
mov [(cpu di).emodels],bl
shr eax,4
mov [(cpu di).efamily],al
mov ebx,edx
and ebx,1 ;infos de jeu d'instruction
setnz [(cpu di).fpu]
mov ebx,edx
and ebx,100000000000000000000000b
setnz [(cpu di).mmx]
mov ebx,edx
and ebx,10000000000000000000000000b
setnz [(cpu di).sse]
mov ebx,edx
and ebx,100000000000000000000000000b
setnz [(cpu di).sse2]
mov ebx,ecx
and ebx,1b
setnz [(cpu di).sse3]
mov ebx,edx
and ebx,10000000000000000000000000000b
setnz [(cpu di).htt]
@@nofonc1:
mov eax,80000000h ;Fonction 80000000 de CPUID
cpuid
cmp eax,80000001h
jb @@nofonc8
mov eax,80000001h ;Fonction 80000000 de CPUID
cpuid
mov ebx,edx
and ebx,10000000000000000000000b
setnz [(cpu di).mmx2]
mov ebx,edx
and ebx,1000000000000000000000000000000b
setnz [(cpu di).now3d]
mov ebx,edx
and ebx,10000000000000000000000000000000b
setnz [(cpu di).now3d2]
mov ebx,edx
and ebx,1000000000b
setnz [(cpu di).apic]
@@nofonc8:
mov si,offset @@marks
push cs
pop ds
@@search:
mov di,[@pointer]
mov cx,12
cld
rep cmpsb
jne @@notthegood
cmp cx,0
jne @@notthegood
mov cl,[si]
inc si
mov di,[@pointer]
cld
rep movsb
mov al,0
stosb
mov di,[@pointer]
cmp [es:(cpu di).family],15
jne @@notextended
mov al,[es:(cpu di).efamily]
mov ah,[es:(cpu di).emodels]
mov di,[si+2]
jmp @@searchmodel
@@notextended:
mov al,[es:(cpu di).family]
mov ah,[es:(cpu di).models]
mov di,[si]
@@searchmodel:
cmp [di],ax
jne @@notgoodfamily
mov si,di
inc si
inc si
lea di,[es:cpu.names]
add di,[@pointer]
@@copystr:
mov al,[si]
mov [es:di],al
inc si
inc di
cmp al,0
jne @@copystr
jmp @@endofsearch
@@notgoodfamily:
inc di
@@nextelement:
inc di
cmp [byte ptr di-1],0
jne @@nextelement
jmp @@searchmodel
@@notthegood:
inc si
cmp [word ptr si],0FFFFh
jne @@notthegood
inc si
inc si
cmp [word ptr si],0FFFFh
je @@endofsearch
jmp @@search
@@endofsearch:
ret
@@nocpuidatall:
ret
;tableau avec vendeur taille + chainereelle + pointeur famille + pointeur famille etendue
@@marks db "GenuineIntel",5,"Intel"
dw @@intelfamily,@@intelfamilye
dw 0FFFFh
db "AuthenticAMD",3,"Amd"
dw @@amdfamily,@@amdfamilye
dw 0FFFFh
db "CyrixInstead",5,"Cyrix"
dw @@cyrixfamily,@@cyrixfamilye
dw 0FFFFh
dw 0FFFFh
;tableau avec famille modele et chaine 0
@@intelfamily:
db 4,0,"486 DX-25/33",0
db 4,1,"486 DX-50",0
db 4,2,"486 SX",0
db 4,3,"486 DX/2",0
db 4,4,"486 SL",0
db 4,5,"486 SX/2",0
db 4,7,"486 DX/2-WB",0
db 4,8,"486 DX/4",0
db 4,9,"486 DX/4-WB",0
db 5,0,"Pentium 60/66 A-step",0
db 5,1,"Pentium 60/66",0
db 5,2,"Pentium 75 - 200",0
db 5,3,"OverDrive PODP5V83",0
db 5,4,"Pentium MMX",0
db 5,7,"Mobile Pentium 75-200",0
db 5,8,"Mobile Pentium MMX",0
db 6,0,"Pentium Pro A-step",0
db 6,1,"Pentium Pro",0
db 6,3,"Pentium II (Klamath)",0
db 6,5,"Pentium II (Deschutes)",0
db 6,6,"Mobile Pentium II",0
db 6,7,"Pentium III (Katmai)",0
db 6,8,"Pentium III (Coppermine)",0
db 6,9,"Mobile Pentium III",0
db 6,10,"Pentium III (0.18 µm)",0
db 6,11,"Pentium III (0.13 µm)",0
db 7,0,"Itanium (IA-64)",0
db 0FFh,0FFh,"Inconnu",0
@@intelfamilye:
db 0,0,"Pentium IV (0.18 µm)",0
db 0,1,"Pentium IV (0.18 µm)",0
db 0,2,"Pentium IV (0.13 µm)",0
db 0,3,"Pentium IV (0.09 µm)",0
db 1,0,"Itanium 2 (IA-64)",0
db 0FFh,0FFh,"Inconnu",0
@@amdfamily:
db 4,3,"486 DX/2",0
db 4,7,"486 DX/2-WB",0
db 4,8,"486 DX/4",0
db 4,9,"486 DX/4-WB",0
db 4,14,"Am5x86-WT",0
db 4,15,"Am5x86-WB",0
db 5,0,"K5/SSA5",0
db 5,1,"K5 (PR120/133)",0
db 5,2,"K5 (PR166)",0
db 5,3,"K5 (PR200)",0
db 5,6,"K6 (0.30 µm)",0
db 5,7,"K6 (0.25 µm)",0
db 5,8,"K6-2",0
db 5,9,"K6-3",0
db 5,13,"K6-2+/K6-III+ (0.18 µm)",0
db 6,0,"Athlon (25 µm)",0
db 6,1,"Athlon (25 µm)",0
db 6,2,"Athlon (18 µm)",0
db 6,3,"Duron",0
db 6,4,"Athlon (Thunderbird)",0
db 6,6,"Athlon (Palamino)",0
db 6,7,"Duron (Morgan)",0
db 6,8,"Athlon (Thoroughbred)",0
db 6,10,"Athlon (Barton)",0
db 0FFh,0FFh,"Inconnu",0
@@amdfamilye:
db 0,4,"Athlon 64",0
db 0,5,"Athlon 64 FX/Opteron",0
db 0FFh,0FFh,"Inconnu",0
@@cyrixfamily:
db 4,4,"MediaGX",0
db 5,2,"6x86/6x86L",0
db 5,4,"MediaGX MMX Enhanced",0
db 6,0,"MII (6x86MX)",0
db 6,5,"VIA Cyrix M2 core",0
db 6,6,"WinChip C5A",0
db 6,7,"WinChip C5B/WinChip C5C",0
db 6,8,"WinChip C5N",0
db 6,9,"WinChip C5XL/WinChip C5P",0
db 0FFh,0FFh,"Inconnu",0
@@cyrixfamilye:
db 0FFh,0FFh,"Inconnu",0
endp cpuinfo
;Test si CPUID est supporté oui=not Equal
nocpuid:
pushfd
pop eax
xor eax,00200000h
push eax
popfd
pushfd
pop eax
cmp eax,ebx
ret

907
lib/video.asm Normal file
View File

@ -0,0 +1,907 @@
model tiny,stdcall
p486
locals
jumps
codeseg
option procalign:byte
include "..\include\mem.h"
org 0h
header exe <"CE",1,0,0,offset exports,offset imports,,>
exports:
db "print",0
dw print
db "showdate",0
dw showdate
db "showtime",0
dw showtime
db "showname",0
dw showname
db "showattr",0
dw showattr
db "showsize",0
dw showsize
db "showspace",0
dw showspace
db "showint",0
dw showint
db "showsigned",0
dw showsigned
db "showhex",0
dw showhex
db "showbin",0
dw showbin
db "showbcd",0
dw showbcd
db "showstring",0
dw showstring
db "showstring0",0
dw showstring0
db "showintr",0
dw showintr
db "showintl",0
dw showintl
dw 0
imports:
db "VIDEO::addline",0
addline dd 0
db "VIDEO::setcolor",0
setcolor dd 0
db "VIDEO::getxy",0
getxy dd 0
db "VIDEO::setxy",0
setxy dd 0
db "VIDEO::setvideomode",0
setvideomode dd 0
db "VIDEO::setfont",0
setfont dd 0
db "VIDEO::clearscreen",0
clearscreen dd 0
db "VIDEO::enablescroll",0
enablescroll dd 0
db "VIDEO::disablescroll",0
disablescroll dd 0
db "VIDEO::showchar",0
showchar dd 0
dw 0
;================PRINT==============
;Affiche la chaine %0 en utilisant les parametres de formatage %x....%x
;-> %0 %x
;<-
;===================================
PROC print FAR
ARG @@pointer:word
push ax bx cx si di
xor di,di
mov si,[@@pointer]
@@strinaize0:
mov cl,[si]
cmp cl,0
je @@no0
cmp cl,'%'
je @@special
cmp cl,'\'
je @@special2
@@showit:
xor ch,ch
call [cs:showchar],cx,0FFFFh
inc si
jmp @@strinaize0
@@special:
cmp [byte ptr si+1],'%'
jne @@notshowit
inc si
jmp @@showit
@@notshowit:
mov cl,[byte ptr si+1]
cmp cl,'c'
je @@showchar
cmp cl,'u'
je @@showint
cmp cl,'v'
je @@showfixint
cmp cl,'w'
je @@showintr
cmp cl,'i'
je @@showsigned
cmp cl,'h'
je @@showhex
cmp cl,'b'
je @@showbin
cmp cl,'s'
je @@showstring
cmp cl,'0'
je @@showstring0
cmp cl,'y'
je @@showbcd
cmp cl,'z'
je @@showsize
cmp cl,'a'
je @@showattr
cmp cl,'n'
je @@showname
cmp cl,'t'
je @@showtime
cmp cl,'d'
je @@showdate
clc
jmp @@no0
@@showchar:
cmp [byte ptr si+2],'M'
je @@showmultchar
call [cs:showchar],[word ptr @@pointer+di+2],0FFFFh
add si,2
add di,2
jmp @@strinaize0
@@showmultchar:
mov cx,[offset @@pointer+di+2+2]
cmp cx,0
je @@nextfunc
@@showcharx:
call [cs:showchar],[word ptr @@pointer+di+2],0FFFFh
dec cx
jnz @@showcharx
@@nextfunc:
add si,3
add di,4
jmp @@strinaize0
@@showint:
call showint,[dword ptr @@pointer+di+2]
add si,2
add di,4
jmp @@strinaize0
@@showfixint:
call showintl,[word ptr @@pointer+di+6],[dword ptr @@pointer+di+2]
add di,6
add si,2
jmp @@strinaize0
@@showintr:
call showintr,[word ptr @@pointer+di+6],[dword ptr @@pointer+di+2]
add di,6
add si,2
jmp @@strinaize0
@@showsigned:
call @@Chosesize
call showsigned
jmp @@strinaize0
@@showhex:
call @@Chosesize
call showhex
jmp @@strinaize0
@@showbin:
call @@Chosesize
call showbin
jmp @@strinaize0
@@showstring:
cmp [byte ptr si+2],'P'
je @@showstring@@pointer
call showstring,[word ptr @@pointer+di+2]
add si,2
add di,2
jmp @@strinaize0
@@showstring@@pointer:
push ds
mov ds,[offset @@pointer+di+2+2]
call showstring,[word ptr @@pointer+di+2]
add si,3
add di,4
pop ds
jmp @@strinaize0
@@showstring0:
cmp [byte ptr si+2],'P'
je @@showstring0@@pointer
call showstring0,[word ptr offset @@pointer+di+2]
add si,2
add di,2
jmp @@strinaize0
@@showstring0@@pointer:
push ds
mov ds,[offset @@pointer+di+2+2]
call showstring0,[word ptr offset @@pointer+di+2]
add si,3
add di,4
pop ds
jmp @@strinaize0
@@showbcd:
call @@Chosesize
call showbcd
jmp @@strinaize0
@@showsize:
call showsize,[dword ptr offset @@pointer+di+2]
add si,2
add di,4
jmp @@strinaize0
@@showattr:
call showattr,[word ptr offset @@pointer+di+2]
add si,2
add di,2
jmp @@strinaize0
@@showname:
call showname,[word ptr offset @@pointer+di+2]
add si,2
add di,2
jmp @@strinaize0
@@showtime:
call showtime,[word ptr offset @@pointer+di+2]
add si,2
add di,2
jmp @@strinaize0
@@showdate:
call showdate,[word ptr offset @@pointer+di+2]
add si,2
add di,2
jmp @@strinaize0
@@Chosesize:
pop cx
push [dword ptr offset @@pointer+di+2]
add di,4
cmp [byte ptr si+2],'B'
je @@byte
cmp [byte ptr si+2],'W'
je @@word
cmp [byte ptr si+2],'D'
je @@dword
dec si
@@word:
push 16
add si,3
push cx
retn
@@byte:
push 8
add si,3
push cx
retn
@@dword:
push 32
add si,3
push cx
retn
@@special2:
cmp [byte ptr si+1],'\'
jne @@notshowit2
inc si
jmp @@showit
@@notshowit2:
mov cl,[byte ptr si+1]
cmp cl,'l'
je @@showline
cmp cl,'g'
je @@goto
cmp cl,'h'
je @@gotox
cmp cl,'c'
je @@color
cmp cl,'m'
je @@setvideomode
cmp cl,'e'
je @@clearscreen
cmp cl,'s'
je @@savestate
cmp cl,'r'
je @@restorestate
cmp cl,'i'
je @@enablescroll
cmp cl,'j'
je @@disablescroll
cmp cl,'f'
je @@setfont
clc
jmp @@no0
@@color:
mov al,[si+2]
sub al,'0'
shl al,4
add al,[si+3]
sub al,'0'
xor ah,ah
call [cs:setcolor],ax
add si,4
jmp @@strinaize0
@@gotox:
mov bh,[si+2]
sub bh,'0'
mov bl,bh
shl bl,3
add bl,bh
add bl,bh
add bl,[si+3]
sub bl,'0'
xor bh,bh
call [cs:getxy]
xor ah,ah
call [cs:setxy],bx,ax
add si,4
jmp @@strinaize0
@@setvideomode:
mov ah,[si+2]
sub ah,'0'
mov al,ah
shl al,3
add al,ah
add al,ah
add al,[si+3]
sub al,'0'
xor ah,ah
call [cs:setvideomode]
add si,4
jmp @@strinaize0
@@setfont:
mov ah,[si+2]
sub ah,'0'
mov al,ah
shl al,3
add al,ah
add al,ah
add al,[si+3]
sub al,'0'
xor ah,ah
call [cs:setfont],ax
add si,4
jmp @@strinaize0
@@showline:
call [cs:addline]
add si,2
jmp @@strinaize0
@@clearscreen:
call [cs:clearscreen]
add si,2
jmp @@strinaize0
@@savestate:
mov ah,40
int 47h
add si,2
jmp @@strinaize0
@@restorestate:
mov ah,41
int 47h
add si,2
jmp @@strinaize0
@@enablescroll:
call [cs:enablescroll]
add si,2
jmp @@strinaize0
@@disablescroll:
call [cs:disablescroll]
add si,2
jmp @@strinaize0
@@goto:
mov ah,[si+2]
sub ah,'0'
mov al,ah
shl al,3
add al,ah
add al,ah
add al,[si+3]
sub al,'0'
xor ah,ah
;
mov bh,[si+5]
sub bh,'0'
mov bl,bh
shl bl,3
add bl,bh
add bl,bh
add bl,[si+6]
sub bl,'0'
xor bh,bh
call [cs:setxy],ax,bx
mov ah,25
int 47h
add si,7
jmp @@strinaize0
@@no0:
add di,bp
mov ax,[ss:bp] ;BP
mov bx,[ss:bp+2] ;IP
mov cx,[ss:bp+4] ;CS
mov [ss:di],ax
mov [ss:di+2],bx
mov [ss:di+4],cx
mov bp,di
pop di si cx bx ax
mov sp,bp
ret
ENDP print
;================SHOWDATE==============
;Affiche la date contenu en %0
;-> %0
;<-
;======================================
PROC showdate FAR
ARG @dates:word
USES edx
xor edx,edx
mov dx,[@dates]
and dx,11111b
call showintl,2,edx
call [cs:showchar],'/',0FFFFh
mov dx,[@dates]
shr dx,5
and dx,111b
call showintl,2,edx
call [cs:showchar],'/',0FFFFh
mov dx,[@dates]
shr dx,8
and dx,11111111b
add dx,1956
call showintl,2,edx
ret
ENDP showdate
;================SHOWTIME==============
;Affiche l'heure contenu en %0
;-> %0
;<-
;======================================
PROC showtime FAR
ARG @times:word
USES edx
xor edx,edx
mov dx,[@times]
shr dx,11
and dx,11111b
call showintl,2,edx
call [cs:showchar],':',0FFFFh
mov dx,[@times]
shr dx,5
and dx,111111b
call showintl,2,edx
call [cs:showchar],':',0FFFFh
mov dx,[@times]
and dx,11111b
shl dx,1
call showintl,2,edx
ret
ENDP showtime
;================SHOWNAME==============
;Affiche le nom pointé par ds:%0
;-> ds:%0
;<-
;======================================
PROC showname FAR
ARG @thename:word
USES cx,si
mov si,[@thename]
xor cx,cx
@@showthename:
call [cs:showchar],[word ptr ds:si],0FFFFh
inc si
inc cx
cmp cx,8
jne @@suiteaname
call [cs:showchar],' ',0FFFFh
@@suiteaname:
cmp cx,8+3
jb @@showthename
ret
ENDP showname
;================SHOWATTR==============
;Affiche les attributs spécifié par %0
;-> %0
;<-
;======================================
PROC showattr FAR
ARG @attr:word
push 0FFFFh
test [@attr],00000001b
je @@noreadonly
push 'L'
jmp @@readonly
@@noreadonly:
push '-'
@@readonly:
call [cs:showchar]
push 0FFFFh
test [@attr],00000010b
je @@nohidden
push 'C'
jmp @@hidden
@@nohidden:
push '-'
@@hidden:
call [cs:showchar]
push 0FFFFh
test [@attr],00000100b
je @@nosystem
push 'S'
jmp @@system
@@nosystem:
push '-'
@@system:
call [cs:showchar]
push 0FFFFh
test [@attr],00100000b
je @@noarchive
push 'A'
jmp @@archive
@@noarchive:
push '-'
@@archive:
call [cs:showchar]
push 0FFFFh
test [@attr],00010000b
je @@nodirectory
push 'R'
jmp @@directory
@@nodirectory:
push '-'
@@directory:
call [cs:showchar]
ret
ENDP showattr
;================SHOWSIZE==============
;Affiche le nom pointé par %0
;-> %0
;<-
;======================================
PROC showsize FAR
ARG @thesize:dword
USES edx,ds
push cs
pop ds
mov edx,[@thesize]
cmp edx,1073741824
ja @@giga
cmp edx,1048576*9
ja @@mega
cmp edx,1024*9
ja @@kilo
call showintr,4,edx
call showstring0,offset unit
jmp @@finsize
@@kilo:
shr edx,10
call showintr,4,edx
call showstring0,offset unitkilo
jmp @@finsize
@@mega:
shr edx,20
call showintr,4,edx
call showstring0,offset unitmega
jmp @@finsize
@@giga:
shr edx,30
call showintr,4,edx
call showstring0,offset unitgiga
@@finsize:
ret
unit db ' o ',0
unitkilo db ' ko',0
unitmega db ' mo',0
unitgiga db ' go',0
ENDP showsize
;==========SHOWSPACE===========
;met un espace aprés le curseur
;->
;<-
;==============================
PROC showspace FAR
call [cs:showchar],' ',0FFFFh
clc
ret
ENDP showspace
;==========SHOWINT===========
;Affiche un entier %0 aprés le curseur
;-> %0
;<-
;============================
PROC showint FAR
ARG @integer:dword
USES eax,bx,cx,edx,esi
xor cx,cx
mov eax,[@integer]
mov esi,10
mov bx,offset showbuffer+27
@@decint:
xor edx,edx
div esi
add dl,'0'
inc cx
mov [cs:bx],dl
dec bx
cmp ax,0
jne @@decint
mov ax,cx
@@showinteger:
inc bx
mov cl,[cs:bx]
call [cs:showchar],cx,0FFFFh
dec ax
jnz @@showinteger
ret
showbuffer db 50 dup (0FFh)
ENDP showint
;==========SHOWINTL===========
;Affiche un entier %0 aprés le curseur de taille %1 caractère centré a gauche
;-> %0 un entier % taille en caractères
;<-
;===============================
PROC showintl FAR
ARG @sizeofint:word,@integer:dword
USES eax,bx,cx,edx,esi,di
mov di,[@sizeofint]
xor cx,cx
mov eax,[@integer]
mov esi,10
mov bx,offset showbuffer+27
@@decint:
xor edx,edx
div esi
add dl,'0'
inc cx
mov [cs:bx],dl
dec bx
cmp cx,di
jae @@nomuch
cmp ax,0
jne @@decint
mov ax,di
xchg cx,di
sub cx,di
@@rego:
mov [byte ptr cs:bx],'0'
dec bx
dec cx
jnz @@rego
jmp @@finishim
@@nomuch:
mov ax,di
@@finishim:
@@showinteger:
inc bx
mov cl,[cs:bx]
call [cs:showchar],cx,0FFFFh
dec ax
jnz @@showinteger
ret
ENDP showintl
;==========SHOWINTR===========
;Affiche un entier %0 aprés le curseur de taille %1 caractère centré a droite
;-> %0 un entier % taille en caractères
;<-
;===============================
PROC showintr FAR
ARG @sizeofint:word,@integer:dword
USES eax,bx,cx,edx,esi,di
mov di,[@sizeofint]
xor cx,cx
mov eax,[@integer]
mov esi,10
mov bx,offset showbuffer+27
@@decint:
xor edx,edx
div esi
add dl,'0'
inc cx
mov [cs:bx],dl
dec bx
cmp cx,di
jae @@nomuch
cmp ax,0
jne @@decint
mov ax,di
xchg cx,di
sub cx,di
@@rego:
mov [byte ptr cs:bx],' '
dec bx
dec cx
jnz @@rego
jmp @@finishim
@@nomuch:
mov ax,di
@@finishim:
@@showinteger:
inc bx
mov cl,[cs:bx]
call [cs:showchar],cx,0FFFFh
dec ax
jnz @@showinteger
ret
ENDP showintr
;==========SHOWSIGNED===========
;Affiche un entier %0 de taille %1 aprés le curseur
;-> %0 un entier, %1 la taille
;<-
;===============================
PROC showsigned FAR
ARG @sizeofint:word,@integer:dword=taille
USES ebx,cx,edx
mov ebx,[@integer]
mov cx,[@sizeofint]
xor edx,edx
cmp cx,1
ja @@signed16
mov dl,bl
cmp dl,7Fh
jbe @@notsigned
neg dl
jmp @@showminus
@@signed16:
cmp cx,2
ja @@signed32
mov dx,bx
cmp dx,7FFFh
jbe @@notsigned
neg dx
jmp @@showminus
@@signed32:
mov edx,ebx
cmp edx,7FFFFFFFh
jbe @@notsigned
neg edx
@@showminus:
call [cs:showchar],'-',0FFFFh
@@notsigned:
call showint,edx,0FFFFh
ret
ENDP showsigned
;==========SHOWHEX===========
;Affiche un nombre hexadécimal %0 de taille %1 aprés le curseur
;-> %0 un entier, %1 la taille
;<-
;============================
PROC showhex FAR
ARG @sizeofint:word,@integer:dword=taille
USES ax,bx,cx,edx
mov edx,[@integer]
mov cx,[@sizeofint]
mov ax,cx
shr ax,2
sub cx,32
neg cx
shl edx,cl
@@Hexaize:
rol edx,4
mov bx,dx
and bx,0fh
mov cl,[cs:bx+offset Tab]
call [cs:showchar],cx,0FFFFh
dec al
jnz @@Hexaize
ret
Tab db '0123456789ABCDEF'
ENDP showhex
;==========SHOWBIN===========
;Affiche un nombre binaire %0 de taille %1 aprés le curseur
;-> %0 un entier, %1 la taille
;<-
;============================
PROC showbin FAR
ARG @sizeofint:word,@integer:dword=taille
USES ax,cx,edx
mov edx,[@integer]
mov cx,[@sizeofint]
sub cx,32
neg cx
shl edx,cl
mov ax,[@sizeofint]
@@binaize:
rol edx,1
mov cl,'0'
adc cl,0
call [cs:showchar],cx,0FFFFh
dec al
jnz @@binaize
ret
ENDP showbin
;==========SHOWBCD===========
;Affiche un nombre en BCD %0 de taille %1 aprés le curseur
;-> %0 un entier, %1 la taille
;<-
;============================
PROC showbcd FAR
ARG @sizeofint:word,@integer:dword
USES ax,cx,edx
mov edx,[@integer]
mov ax,[@sizeofint]
mov cx,ax
shr ax,2
sub cx,32
neg cx
shl edx,cl
@@BCDaize:
rol edx,4
mov cl,dl
and cl,0fh
add cl,'0'
call [cs:showchar],cx,0FFFFh
dec al
jnz @@BCDaize
ret
ENDP showbcd
;==========SHOWSTRING===========
;Affiche une chaine de caractère pointée par ds:%1 aprés le curseur
;-> ds:%1 pointeur chaine type pascal
;<-
;===============================
PROC showstring FAR
ARG @pointer:word
USES bx,si
mov si,[@pointer]
mov bl,[si]
@@strinaize:
inc si
call [cs:showchar],[word ptr si],0FFFFh
dec bl
jnz @@strinaize
ret
ENDP showstring
;==========SHOWSTRING0===========
;Affiche une chaine de caractère pointée par ds:%1 aprés le curseur
;-> ds:%1 pointeur chaine type zéro terminal
;<-
;================================
PROC showstring0 FAR
ARG @pointer:word
USES cx,si
mov si,[@pointer]
@@strinaize0:
mov cl,[si]
cmp cl,0
je @@no0
call [cs:showchar],cx,0FFFFh
inc si
jmp @@strinaize0
@@no0:
ret
ENDP showstring0

View File

@ -1,56 +1,3 @@
.model tiny
.486
smart
.code
org 0100h
start:
jmp tsr
db 'PIC8259A'
Tsr:
cli
cmp ax,1234h
jne nomore
mov ax,4321h
jmp itsok
nomore:
push bx
mov bl,ah
xor bh,bh
shl bx,1
mov bx,cs:[bx].tables
mov cs:current,bx
pop bx
call cs:current
itsok:
jnc noerror
push bp
mov bp,sp
or byte ptr [bp+6],1b
pop bp
mov ax,cs
shl eax,16
mov ax,cs:current
jmp endofint
noerror:
push bp
mov bp,sp
and byte ptr [bp+6],0FEh
pop bp
endofint:
sti
iret
current dw 0
tables dw enableirq
dw disableirq
dw readmaskirq
dw readirr
dw readisr
dw installhandler
dw replacehandler
dw getint
dw setint
dw seteoi
;Adresses de port du contr“leur IRQ ;Adresses de port du contr“leur IRQ
MASTERPIC = 020h ;Adresse de base du PIC maŒtre MASTERPIC = 020h ;Adresse de base du PIC maŒtre
SLAVEPIC = 0A0h ;Adresse de base du PIC esclave SLAVEPIC = 0A0h ;Adresse de base du PIC esclave
@ -80,162 +27,116 @@ tables dw enableirq
ISR = 0Bh ; Pas d'opration, pas de Poll, lire ISR OCW3 ISR = 0Bh ; Pas d'opration, pas de Poll, lire ISR OCW3
IRR = 0Ah ; Pas d'opration, pas de Poll, lire IRR IRR = 0Ah ; Pas d'opration, pas de Poll, lire IRR
;Autorise une interruption lectronique ;Autorise une interruption lectronique
;Entre : AL - Numro de l'interruption (0-15) … autoriser 0-7 = MASTERPIC , 8-15 = SLAVEPIC ;Entre : %1 - Numro de l'interruption (0-15) … autoriser 0-7 = MASTERPIC , 8-15 = SLAVEPIC
EnableIRQ: PROC enableirq FAR
push ax cx dx ARG @irq:word
mov dx,MASTERPIC+IRQMASK USES ax,cx,dx
cmp al,7 mov ax,[@irq]
jbe master mov dx,MASTERPIC+IRQMASK
mov dx,SLAVEPIC+IRQMASK cmp al,7
master: jbe @@master
mov cl,al mov dx,SLAVEPIC+IRQMASK
and cl,7 @@master:
mov al,1 mov cl,al
shl al,cl and cl,7
not al mov al,1
mov ah,al shl al,cl
in al,dx not al
and al,ah mov ah,al
out dx,al in al,dx
pop dx cx ax and al,ah
ret out dx,al
ret
endp enableirq
;Desactive une interruption lectronique ;Desactive une interruption lectronique
;Entre : AL - Numro de l'interruption (0-15) … desactiver 0-7 = MASTERPIC , 8-15 = SLAVEPIC ;Entre : %0 - Numro de l'interruption (0-15) … desactiver 0-7 = MASTERPIC , 8-15 = SLAVEPIC
DisableIRQ: PROC disableirq FAR
push ax cx dx ARG @irq:word
mov dx,MASTERPIC+IRQMASK USES ax,cx,dx
cmp al,7 mov ax,[@irq]
jbe master2 mov dx,MASTERPIC+IRQMASK
mov dx,SLAVEPIC+IRQMASK cmp al,7
master2: jbe @@master
mov cl,al mov dx,SLAVEPIC+IRQMASK
and cl,7 @@master:
mov al,1 mov cl,al
shl al,cl and cl,7
mov ah,al mov al,1
in al,dx shl al,cl
or al,ah not al
out dx,al mov ah,al
pop dx cx ax in al,dx
ret or al,ah
out dx,al
ret
endp disableirq
;Signale "End Of Interrupt" de l'interruption al
SetEOI:
push ax dx
cmp al,7
jbe master3
mov al,EOI
out SLAVEPIC,al
master3:
mov al,EOI
out MASTERPIC,al
pop dx ax
ret
;Lit les masques d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh ;Signale "End Of Interrupt" de l'interruption %0
ReadmaskIrq: PROC seteoi FAR
push dx ARG @irq:word
mov dx,MASTERPIC+ IRQMASK USES ax,dx
cmp bh,0 mov ax,[@irq]
jne Master5 cmp al,7
mov dx,SLAVEPIC+ IRQMASK jbe @@master
master5: mov al,EOI
in al,dx out SLAVEPIC,al
pop dx @@master:
ret mov al,EOI
out MASTERPIC,al
ret
endp seteoi
;Lit les masques d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1
PROC readmaskirq FAR
ARG @controleur:word
USES bx,dx
mov bx,[@controleur]
mov dx,MASTERPIC+ IRQMASK
cmp bl,0
jne @@master
mov dx,SLAVEPIC+ IRQMASK
@@master:
xor ah,ah
in al,dx
pop dx
ret
endp readmaskirq
;Lit le registre d'tat d'un contr“leur IRQ dans ax, 0 master ou slave 1 ds %1
PROC readisr FAR
ARG @controleur:word
USES bx,dx
mov bx,[@controleur]
mov dx,MASTERPIC
cmp bh,0
jne @@master
mov dx,SLAVEPIC
@@master:
mov al,ISR
out dx,al
xor ah,ah
in al,dx
ret
endp readisr
;Lit le registre d'tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh ;Lit le registre d'tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
ReadISR: PROC readirr FAR
push dx ARG @controleur:word
mov dx,MASTERPIC USES bx,dx
cmp bh,0 mov bx,[@controleur]
jne Master6 mov dx,MASTERPIC
mov dx,SLAVEPIC cmp bh,0
master6: jne @@master
mov al,isr mov dx,SLAVEPIC
out dx,al @@master:
in al,dx mov al,IRR
pop dx out dx,al
ret xor ah,ah
in al,dx
;Lit le registre d'tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh ret
ReadIRR: endp readirr
push dx
mov dx,MASTERPIC
cmp bh,0
jne Master7
mov dx,SLAVEPIC
master7:
mov al,irr
out dx,al
in al,dx
pop dx
ret
;remplace le handler pointer par ds:si en bx:100h interruption ax
replacehandler:
push ax bx cx si di ds es
mov es,bx
mov di,0100h
mov ah,4
int 48h
jc reph
mov bx,ax
call getint
mov es:[102h],si
mov es:[104h],ds
call setint
reph:
pop es ds di si cx bx ax
ret
;install le handler pointer par ds:si en bx:100h interruption ax
installhandler:
push bx cx di es
mov es,bx
mov di,100h
mov ah,4
int 48h
jc inh
mov bx,ax
call setint
inh:
pop es di cx bx
ret
;met es:di le handle de l'int al
setint:
push ax bx ds
call disableirq
cli
xor ah,ah
mov bx,ax
shl bx,2
xor ax,ax
mov ds,ax
mov ds:[bx],di
mov ds:[bx+2],es
pop ds bx ax
sti
call enableirq
ret
;met ds:si le handle de l'int al
getint:
push ax bx es
xor ah,ah
mov bx,ax
shl bx,2
xor ax,ax
mov es,ax
mov si,es:[bx]
mov ds,es:[bx+2]
pop es bx ax
ret
end start

View File

@ -1,72 +1,36 @@
lnk_boot = tlink /x asm= lzasm
asm= tasm /t/m5/zi lnk= elink
lnk= tlink /x/t
all: boot.bin clavier.sys 8259a.sys disque.sys heure.sys horloge.sys manette.sys port.sys souris.sys systeme.sys video.sys mcb.sys all: systeme.sys boot.bin
boot.bin: boot.asm systeme.sys: video.obj systeme.obj
$(asm) boot $(lnk) systeme.obj systeme.sys
$(lnk_boot) boot
exe2boot boot.exe boot.bin
clavier.sys: clavier.asm systeme.obj: ../lib/detect.lib ../lib/video.lib video.sys
$(asm) clavier $(asm) systeme.asm
$(lnk) clavier
ren clavier.com clavier.sys
8259a.sys: 8259a.asm
$(asm) 8259a
$(lnk) 8259a
ren 8259a.com 8259a.sys
disque.sys: disque.asm video.sys:
$(asm) disque $(lnk) video.obj video.sys
$(lnk) disque
ren disque.com disque.sys
heure.sys: heure.asm boot.bin: boot.obj
$(asm) heure $(lnk) boot.obj boot.bin /bs
$(lnk) heure
ren heure.com heure.sys
horloge.sys: horloge.asm detect.obj:
$(asm) horloge $(asm) detect.asm
$(lnk) horloge
ren horloge.com horloge.sys
manette.sys: manette.asm video.obj:
$(asm) manette $(asm) video.asm
$(lnk) manette
ren manette.com manette.sys
port.sys: port.asm boot.obj:
$(asm) port $(asm) boot.asm
$(lnk) port
ren port.com port.sys
souris.sys: souris.asm
$(asm) souris
$(lnk) souris
ren souris.com souris.sys
systeme.sys: systeme.asm
$(asm) systeme
$(lnk) systeme
ren systeme.com systeme.sys
video.sys: video.asm
$(asm) video
$(lnk) video
ren video.com video.sys
mcb.sys: mcb.asm
$(asm) mcb
$(lnk) mcb
ren mcb.com mcb.sys
clean: clean:
del *.obj del *.obj
del *.exe del *.exe
del *.bak
del *.lib
del *.com del *.com
del *.bin
del *.sys del *.sys
del *.err del *.err

View File

@ -1,38 +1,27 @@
boots segment model tiny,stdcall
.386 p486
org 7C00h locals
;org 100h jumps
assume cs:boots,ds:boots codeseg
option procalign:byte
include "..\include\mem.h"
include "..\include\fat.h"
include "..\include\divers.h"
org 7C00h
start:
jmp boot jmp boot
bootdb db 'COS2000A' ;Fabricant + n°série Formatage bootsec bootinfo <"COS2000A",512,1,1,2,224,2880,0F0h,9,18,2,0,0,0,0,0,29h,01020304h,"COS2000 ","FAT12 ">
sizec dw 512 ;octet/secteur
db 1 ;secteur/cluster errorloading db " [Erreur]",0dh,0ah,0
reserv dw 1 ;secteur reserv okloading db "Recherche noyau ",0Dh,0ah," -"
nbfat db 2 ;nb de copie de la FAT sys db "SYSTEME SYS",0
nbfit dw 224 ;taille rep racine syst db " [ Ok ]",0dh,0ah,"Chargement ",0
allclu dw 2880 ;nb secteur du volume si < 32 még dot db ".",0
db 0F0h ;Descripteur de média
fatsize dw 9 ;secteur/FAT
nbtrack dw 18 ;secteur/piste
head dw 2 ;nb de tˆteb de lecture/écriture
hidden dd 0 ;nombre de secteur cachs
dd 0 ;si nbsecteur = 0 nbsect ; the number of sectors
bootdrv db 0 ;Lecteur de dmarrage
bootsig db 0 ;NA
db 29h ;boot signature 29h
bootsig2 dd 01020304h ;no de serie
pope db 'COS2000 ' ;nom de volume
db 'FAT12 ' ;FAT
specialboot:
errorloading db ' Erreur !!',0dh,0ah,0
okloading db 'Recherche noyau',0Dh,0ah,' - system.sys',0
syst db ' Ok',0dh,0ah,'Chargement',0
dot db '.',0
Sys db 'SYSTEME SYS'
errorboot: errorboot:
mov si,offset errorloading mov si,offset errorloading
@ -40,60 +29,62 @@ errorboot:
mov ah,0 mov ah,0
int 16h int 16h
int 19h int 19h
boot: boot:
mov Bootdrv,dl mov [bootsec.bootdrive],dl
cli cli
mov ax,09000h mov ax,09000h
mov ss,ax mov ss,ax
mov sp,0FFFFh mov sp,0FFFFh
sti sti
boot2: boot2:
push cs push cs
push cs push cs
pop es pop es
pop ds pop ds
xor ax,ax xor ax,ax
mov dl,[bootsec.bootdrive]
int 13h int 13h
jc errorboot jc errorboot
mov si,offset okloading mov si,offset okloading
call showstr call showstr
mov cx,Reserv mov cx,[bootsec.reservedsectors]
add cx,word ptr [offset Hidden] add cx,[bootsec.hiddensectorsh]
adc cx,word ptr [offset Hidden+2] adc cx,[bootsec.hiddensectorsl]
push cx push cx
mov bx,fatsize mov bx,[bootsec.sectorsperfat]
mov di,offset bufferfat mov di,offset bufferfat
readfat: readfat:
call readsector call readsector
jc errorboot
inc cx inc cx
add di,sizec add di,[bootsec.sectorsize]
dec bx dec bx
jnz readfat jnz readfat
pop cx pop cx
xor ax,ax xor ax,ax
mov al,NbFat mov al,[bootsec.fatsperdrive]
mov bx,FatSize mov bx,[bootsec.sectorsperfat]
mul bx mul bx
add cx,ax add cx,ax
mov ax,32 mov ax,32
mul nbfit mul [bootsec.directorysize]
div sizec div [bootsec.sectorsize]
add ax,cx add ax,cx
sub ax,2 sub ax,2
mov word ptr [offset bootsig],ax mov [word ptr bootsec.reservedfornt],ax
xor dx,dx xor dx,dx
CheckRoot: checkroot:
mov di,offset buffer mov di,offset buffer
call readsector call readsector
jc errorboot jc errorboot
xor bx,bx xor bx,bx
findnext: findnext:
cmp byte ptr [di],0 cmp [byte ptr di],0
je errorboot je errorboot
cmp byte ptr [di],0E5h cmp [byte ptr di],0E5h
je no je no
cmp byte ptr [di],041h cmp [byte ptr di],041h
je no je no
mov si,offset dot mov si,offset dot
call showstr call showstr
@ -107,12 +98,12 @@ no:
add di,32 add di,32
add bx,32 add bx,32
inc dx inc dx
cmp dx,nbfit cmp dx,[bootsec.directorysize]
ja errorboot ja errorboot
cmp bx,sizec cmp bx,[bootsec.sectorsize]
jb findnext jb findnext
inc cx inc cx
jmp Checkroot jmp checkroot
oksystem: oksystem:
mov si,offset syst mov si,offset syst
call showstr call showstr
@ -120,58 +111,59 @@ oksystem:
mov ax,0900h mov ax,0900h
mov es,ax mov es,ax
push es push es
mov di,100h mov di,0000h
push di push 0010h
mov si,offset dot mov si,offset dot
xor ax,ax xor ax,ax
fatagain: fatagain:
cmp cx,0FF0h cmp cx,0FF0h
jae finishload jae finishload
push cx push cx
add cx,word ptr [offset bootsig] add cx,[word ptr bootsec.reservedfornt]
call readsector call readsector
pop cx pop cx
jc errorboot jc errorboot
inc ax inc ax
call showstr call showstr
add di,sizec add di,[bootsec.sectorsize]
call getfat call getfat
jnc fatagain jnc fatagain
finishload: finishload:
db 0CBh retf
;=============READSECTOR (Fonction 01H)=============== ;=============READSECTOR (Fonction 01H)===============
;Lit le secteur CX et le met en es:di ;Lit le secteur CX et le met en es:di
;-> AH=1 ;-> AH=1
;<- Flag Carry si erreur ;<- Flag Carry si erreur
;===================================================== ;=====================================================
ReadSector: readsector:
push ax bx cx dx si push ax bx cx dx si
mov ax,cx mov ax,cx
xor dx,dx xor dx,dx
div nbtrack div [bootsec.sectorspertrack]
inc dl inc dl
mov bl,dl mov bl,dl
xor dx,dx xor dx,dx
div head div [bootsec.headsperdrive]
mov dh, 0
xchg dl,dh xchg dl,dh
mov cx,ax mov cx,ax
xchg cl,ch xchg cl,ch
shl cl,6 shl cl,6
or cl, bl or cl, bl
mov bx,di mov bx,di
mov SI, 4 mov si, 4
mov AL, 1 mov al, 1
TryAgain: tryagain:
mov AH, 2 mov ah, 2
mov dl,[bootsec.bootdrive]
int 13h int 13h
jnc Done jnc done
dec SI dec si
jnz TryAgain jnz tryagain
Done: done:
pop si dx cx bx ax pop si dx cx bx ax
ret ret
getfat: getfat:
push ax bx dx di push ax bx dx di
@ -199,6 +191,7 @@ endfat:
pop di dx bx ax pop di dx bx ax
ret ret
showstr: showstr:
push ax bx si push ax bx si
again: again:
@ -209,13 +202,15 @@ again:
mov bx,07h mov bx,07h
int 10h int 10h
jmp again jmp again
fin: fin:
pop si bx ax pop si bx ax
ret ret
Buffer equ $
BufferFat equ $+2048
boots ends db 055h,0AAh
end start
endof:
buffer equ offset endof+2048
bufferfat equ offset endof+4096

View File

@ -3,7 +3,9 @@
smart smart
.code .code
org 0100h org 0h
include ..\include\mem.h
start: start:
@ -15,7 +17,6 @@ tsr:
db 2eh,0ffh,1eh db 2eh,0ffh,1eh
dw offsets dw offsets
cli cli
add dword ptr cs:popes,1
cmp cs:isstate,1 cmp cs:isstate,1
je endofforce je endofforce
mov cs:isstate,1 mov cs:isstate,1
@ -43,12 +44,22 @@ F10:
mov si,offset com mov si,offset com
mov ah,5 mov ah,5
int 49h int 49h
mov cs:isstate,0 pop ax
pop ax
pop ax
push gs push gs
push 0100h push gs
db 0CBh push gs
pop ds
pop es
pop fs
push gs
push size exe
sti
mov cs:[isstate],0
retf
com db 'COMMANDE.EXE',0 com db 'COMMANDE.CE',0
F11: F11:
push ax di es push ax di es
@ -70,17 +81,10 @@ notabove:
f12: f12:
showreg:
pushf
pushad pushad
mov bp,sp pushf
mov ax,ss:[bp+28h] push ds
mov cs:[csr],ax mov cs:[eaxr],eax
mov ax,ss:[bp+26h]
mov cs:[ipr],ax
mov ax,ss:[bp+2Ah]
mov cs:[flr],ax
mov cs:[ebxr],ebx mov cs:[ebxr],ebx
mov cs:[ecxr],ecx mov cs:[ecxr],ecx
mov cs:[edxr],edx mov cs:[edxr],edx
@ -88,169 +92,139 @@ mov cs:[esir],esi
mov cs:[edir],edi mov cs:[edir],edi
mov cs:[espr],esp mov cs:[espr],esp
mov cs:[ebpr],ebp mov cs:[ebpr],ebp
mov cs:[csr],cs
mov cs:[dsr],ds mov cs:[dsr],ds
mov cs:[esr],es mov cs:[esr],es
mov cs:[fsr],fs mov cs:[fsr],fs
mov cs:[gsr],gs mov cs:[gsr],gs
mov cs:[ssr],ss mov cs:[ssr],ss
push ds
pop fs
push cs push cs
pop ds pop ds
mov ah,28h mov si,offset sep
int 47h call Showstr
mov ax,0002
int 47H
mov ah,2
int 47h
mov si,offset etat
mov ah,13
int 47h
mov ah,6
int 47h
mov ah,6
int 47h
mov si,offset reg mov si,offset reg
mov di,offset regdata mov di,offset regdata
mov bx,7 mov bx,7
showregs: showregs:
cmp byte ptr cs:[si+4],":" cmp byte ptr cs:[si+6],":"
jne endshowregs jne endshowregs
mov ah,13 call Showstr
int 47h cmp byte ptr cs:[si+4]," "
cmp byte ptr cs:[si+3],"g"
je segsss
cmp byte ptr cs:[si+2]," "
je segsss je segsss
mov edx,cs:[di] mov edx,cs:[di]
mov cx,32 mov cx,32
mov ah,0Ah call Showhex
int 47h
add di,4 add di,4
jmp showmax jmp showmax
segsss: segsss:
xor edx,edx
mov dx,cs:[di] mov dx,cs:[di]
mov cx,16 mov cx,16
mov ah,0Ah call Showhex
int 47h
push si
mov ah,13
mov si,offset blank
int 47h
pop si
add di,2 add di,2
showmax: showmax:
add si,7 add si,9
mov ebp,edx mov bp,dx
push si push si
mov si,offset beginds mov si,offset beginds
mov ah,13 call showstr
int 47h mov si,bp
pop si
mov cx,8 mov cx,8
mov al,0 mov al,0
mov bx,bp
letshow: letshow:
mov dl,fs:[bx] mov dl,ds:[si]
inc bx inc si
mov ah,0Ah call showhex
int 47h
inc al inc al
cmp al,10 cmp al,10
jb letshow jb letshow
push si
mov si,offset ende mov si,offset ende
mov ah,13 call showstr
int 47h
mov si,offset begines mov si,offset begines
mov ah,13 call showstr
int 47h mov si,bp
pop si
mov bx,bp
mov cx,8 mov cx,8
mov al,0 mov al,0
letshow2: letshow2:
mov dl,es:[bx] mov dl,es:[si]
inc bx inc si
mov ah,0Ah call showhex
int 47h
inc al inc al
cmp al,10 cmp al,10
jb letshow2 jb letshow2
push si
mov si,offset ende mov si,offset ende
mov ah,13 call showstr
int 47h
mov si,offset beginint
mov ah,13
int 47h
pop si pop si
mov edx,ebp
mov ah,8
int 47h
push si
mov si,offset endint
mov ah,13
int 47h
pop si
mov ah,6
int 47h
jmp showregs jmp showregs
endshowregs: endshowregs:
mov ah,6 mov si,offset sep
int 47h call Showstr
mov si,offset pile
mov ah,13
int 47h
mov ah,6
int 47h
mov bp,sp
mov di,0ffffh
sub di,bp
xor si,si
showstack:
mov dl,'+'
mov ah,07h
int 47h
mov ah,0Ah
mov cx,8
mov dx,si
int 47h
mov dl,':'
mov ah,07h
int 47h
mov dx,ss:[bp+si]
mov ah,0Ah
mov cx,16
int 47h
mov ah,06
int 47h
inc si
inc si
cmp si,di
jb showstack
mov ah,0ah
mov edx,cs:popes
mov cx,32
int 47h
xor ax,ax xor ax,ax
int 16h int 16h
mov ah,29h pop ds
int 47h
popad
popf popf
popad
jmp endof jmp endof
begines db ' es[',0
beginds db ' ds[',0
ende db '] ',0
popes dd 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: regdata:
eaxr dd 0 eaxr dd 0
ebxr dd 0 ebxr dd 0
@ -260,40 +234,28 @@ esir dd 0
edir dd 0 edir dd 0
espr dd 0 espr dd 0
ebpr dd 0 ebpr dd 0
ipr dw 0
csr dw 0 csr dw 0
dsr dw 0 dsr dw 0
esr dw 0 esr dw 0
fsr dw 0 fsr dw 0
gsr dw 0 gsr dw 0
ssr dw 0 ssr dw 0
flr dw 0
etat db ' Etat des registres processeurs',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
reg db "eax : ",0 sep db 0Ah,0Dh,'********************',0Ah,0Dh,0
db "ebx : ",0
db "ecx : ",0
db "edx : ",0
db "esi : ",0
db "edi : ",0
db "esp : ",0
db "ebp : ",0
db "ip : ",0
db "cs : ",0
db "ds : ",0
db "es : ",0
db "fs : ",0
db "gs : ",0
db "ss : ",0
db "flag: ",0
pile db 'Stack :',0
blank db ' ',0
beginint db ' (',0
endint db ') ',0
begines db ' es[',0
beginds db ' ds[',0
ende db '] ',0
end start end start

View File

@ -3,13 +3,13 @@
smart smart
.code .code
org 0100h org 0h
include ..\include\fat.h include ..\include\fat.h
include ..\include\mem.h
start: start:
jmp tsr ;Saute à la routine résidente jmp tsr ;Saute à la routine résidente
names db 'DRIVE' ;Nom drivers
id dw 1234h ;Identifiant drivers id dw 1234h ;Identifiant drivers
Tsr: Tsr:
cli ;Désactive interruptions logiciellement cli ;Désactive interruptions logiciellement
@ -36,15 +36,23 @@ noerrorint:
itsok: itsok:
push bp push bp
mov bp,sp ;On prend sp dans bp pour adresser la pile mov bp,sp ;On prend sp dans bp pour adresser la pile
pushf
jnc noerror ;La fonction appelée a renvoyer une erreur : Flag CARRY ? 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 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 ;xor eax,eax
;mov ax,cs ;On récupère le segment et l'offset puis en renvoie l'adresse physique ;mov ax,cs ;On récupère le segment et l'offset puis en renvoie l'adresse physique
;shl eax,4 ;de l'erreur. ;shl eax,4 ;de l'erreur.
;add ax,cs:current ;add ax,cs:current
jmp endofint ;on termine l'int jmp endofscan ;on termine l'int
noerror: 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 and byte ptr [bp+6],0FEh;Si pas d'erreur on efface le Bit CARRY du FLAG qui sera dépilé lors du IRET
endofscan:
popf
jne noequal
or byte ptr [bp+6],1000000b
jmp endofint
noequal:
and byte ptr [bp+6],0BFh
endofint: endofint:
pop bp pop bp
sti ;On réactive les interruptions logiciellement sti ;On réactive les interruptions logiciellement
@ -53,7 +61,7 @@ endofint:
current dw 0 ;Mot temporaire qui contient l'adresse de la fonction appelée current dw 0 ;Mot temporaire qui contient l'adresse de la fonction appelée
tables dw readsector tables dw readsector
dw writesector dw writesector
dw verifysector2 dw verifysector
dw initdrive dw initdrive
dw loadfile dw loadfile
dw compressrle dw compressrle
@ -182,12 +190,21 @@ execfile:
pop gs pop gs
mov ah,6 mov ah,6
int 49h int 49h
mov ah,12
int 49h
jc reallyerror
push es push es
push cs push cs
mov ax,offset arrive mov ax,offset arrive
push ax push ax
push es push es
push 0100h cmp word ptr gs:[0h],'EC'
jne noce
push size exe
jmp wasce
noce:
push 0000h
wasce:
push es push es
push es push es
push es push es
@ -235,7 +252,6 @@ projfile:
jc errorload2 jc errorload2
mov eax,cs:tempfit.FileSize mov eax,cs:tempfit.FileSize
mov ecx,eax mov ecx,eax
add ecx,100h
push eax push eax
mov ah,2 mov ah,2
int 49h int 49h
@ -244,7 +260,7 @@ projfile:
push gs push gs
pop es pop es
mov cx,cs:tempfit.FileGroup mov cx,cs:tempfit.FileGroup
mov di,100h mov di,0h
call loadway call loadway
jc errorload2 jc errorload2
clc clc
@ -338,29 +354,38 @@ CmpNames:
repe cmpsb repe cmpsb
jne nequal jne nequal
inc si inc si
jmp equal
nequal: nequal:
cmp byte ptr es:[di-1],' '
jne notequal
equal:
cmp byte ptr [si-1],'.' cmp byte ptr [si-1],'.'
jne trynoext jne trynoext
mov al,' ' mov al,' '
rep scasb rep scasb
mov cx,3 mov cx,3
rep cmpsb rep cmpsb
jne nequal2
inc si
jmp equal2
nequal2:
cmp byte ptr es:[di-1],' '
jne notequal jne notequal
cmp byte ptr [si],0 equal2:
cmp byte ptr [si-1],0
jne notequal jne notequal
cmp cx,0
jl notequal
itok: itok:
clc
pop di si cx ax
ret
notequal:
stc
pop di si cx ax pop di si cx ax
ret ret
trynoext: trynoext:
cmp byte ptr [si-1],0 cmp byte ptr [si-1],0
jne notequal jne notequal
jmp itok jmp itok
notequal:
stc
pop di si cx ax
ret
;charge le fichier de de groupe CX et de taille eax ;charge le fichier de de groupe CX et de taille eax
LoadWay: LoadWay:
@ -884,13 +909,6 @@ invert:
pop cx si pop cx si
ret ret
VerifySector2:
call verifysector
jne nook
or byte ptr [bp+6],10b
nook:
ret
;=============DecompressRle (Fonction 05H)============== ;=============DecompressRle (Fonction 05H)==============
;decompress ds:si en es:di taille bp dcompress cx compress ;decompress ds:si en es:di taille bp dcompress cx compress
;-> AH=5 ;-> AH=5

View File

@ -3,7 +3,7 @@
smart smart
.code .code
org 0100h org 0h
start: start:
jmp tsr ;Saute à la routine résidente jmp tsr ;Saute à la routine résidente

View File

@ -3,7 +3,7 @@
smart smart
.code .code
org 0100h org 0h
start: start:

View File

@ -3,7 +3,7 @@
smart smart
.code .code
org 0100h org 0h
start: start:

View File

@ -2,7 +2,7 @@
.486 .486
smart smart
.code .code
org 0100h org 0h
start: start:
jmp tsr jmp tsr
drv db 'JOYSTICK',0 drv db 'JOYSTICK',0

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
.486 .486
smart smart
.code .code
org 0100h org 0h
start: start:
jmp tsr jmp tsr
drv db 'LPT ',0 drv db 'LPT ',0

View File

@ -2,7 +2,7 @@
.486 .486
smart smart
.code .code
org 0100h org 0h
start: start:
jmp tsr jmp tsr
drv db 'MOUSE',0 drv db 'MOUSE',0

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -7,52 +7,43 @@ all: detect.com editeur.com gestion.com logo.com pmode.com souris.com test.com v
memoire.com: memoire.asm memoire.com: memoire.asm
$(asm) memoire $(asm) memoire
$(lnk) memoire $(lnk) memoire
ren memoire.com memoire.com
detect.com: detect.asm detect.com: detect.asm
$(asm) detect $(asm) detect
$(lnk) detect $(lnk) detect
ren detect.com detect.com
editeur.com: editeur.asm editeur.com: editeur.asm
$(asm) editeur $(asm) editeur
$(lnk) editeur $(lnk) editeur
ren editeur.com editeur.com
gestion.com: gestion.asm gestion.com: gestion.asm
$(asm) gestion $(asm) gestion
$(lnk) gestion $(lnk) gestion
ren gestion.com gestion.com
logo.com: logo.asm logo.com: logo.asm
$(asm) logo $(asm) logo
$(lnk) logo $(lnk) logo
ren logo.com logo.com
pmode.com: pmode.asm pmode.com: pmode.asm
$(asm) pmode $(asm) pmode
$(lnk) pmode $(lnk) pmode
ren pmode.com pmode.com
souris.com: souris.asm souris.com: souris.asm
$(asm) souris $(asm) souris
$(lnk) souris $(lnk) souris
ren souris.com souris.com
test.com: test.asm test.com: test.asm
$(asm) test $(asm) test
$(lnk) test $(lnk) test
ren test.com test.com
verifier.com: verifier.asm verifier.com: verifier.asm
$(asm) verifier $(asm) verifier
$(lnk) verifier $(lnk) verifier
ren verifier.com verifier.com
volume.com: volume.asm volume.com: volume.asm
$(asm) volume $(asm) volume
$(lnk) volume $(lnk) volume
ren volume.com volume.com
clean: clean:
del *.obj del *.obj

View File

@ -3,57 +3,32 @@
smart smart
.code .code
org 0100h org 0h
include ..\include\pci.h include ..\include\pci.h
include ..\include\mem.h
start: start:
header exe <,1,0,,,offset imports,,>
realstart:
call getpciinfos call getpciinfos
mov pciversion,bx mov [pciversion],bx
mov nbbus,cl mov [nbbus],cl
mov pcitype,al mov [pcitype],al
mov si,offset msg
mov ah,13
int 47h
mov ah,6
int 47h
mov si,offset pcivers
mov ah,13
int 47h
xor edx,edx xor edx,edx
mov dx,bx mov dl,[nbbus]
xchg dl,dh
mov cx,8
mov ah,0Ah
int 47h
mov si,offset poin
mov ah,13
int 47h
shr dx,8
mov ah,0Ah
int 47h
mov si,offset pcivers2
mov ah,13
int 47h
mov ah,6
int 47h
mov si,offset nbbuses
mov ah,13
int 47h
xor edx,edx
mov dl,nbbus
inc dl inc dl
mov ah,08 push edx
int 47h mov dx,[pciversion]
mov ah,06 push edx
int 47h mov dx,[pciversion]
shr dx,8
push edx
push offset msg
call [print]
mov si,offset typesof
mov ah,13
int 47h
mov di,offset types mov di,offset types
mov bx,7 mov bx,7
mov al,pcitype mov al,pcitype
@ -61,89 +36,50 @@ vote:
bt ax,bx bt ax,bx
jnc nowas jnc nowas
shl bx,1 shl bx,1
mov si,[di+bx] push word ptr [di+bx]
mov ah,13 call [print]
int 47h
mov si,offset spac
mov ah,13
int 47h
shr bx,1 shr bx,1
nowas: nowas:
dec bx dec bx
jns vote jns vote
mov ah,6 push offset return
int 47h call [print]
xor ax,ax xor ax,ax
xor cx,cx xor cx,cx
mov di,offset infos mov si,offset infos
search: search:
mov di,si
call Getallfunctionsinfos call Getallfunctionsinfos
jc stopthis jc stopthis
mov dh,[si+pci.subclass]
mov bp,cx mov dl,[si+pci.class]
push cx di ;sousclasse
mov si,offset msg1 mov di,offset subclasse
mov ah,13
int 47h
mov cx,16
xor edx,edx
mov dx,[di+pci.device]
mov ah,0Ah
int 47h
mov si,offset msg2
mov ah,13
int 47h
mov dx,[di+pci.vendor]
mov ah,0Ah
int 47h
mov si,offset msg4
mov ah,13
int 47h
xor dx,dx
mov dl,al
mov cx,8
mov ah,0Ah
int 47h
mov ah,07
mov dl,'.'
int 47h
mov dx,bp
xor dh,dh
mov cx,8
mov ah,0Ah
int 47h
mov ah,07
mov dl,'.'
int 47h
mov dx,bp
shr dx,8
mov cx,8
mov ah,0Ah
int 47h
mov ah,05h
int 47h
mov si,offset msg3
mov ah,13
int 47h
mov cl,[di+pci.class]
mov ch,[di+pci.subclass]
mov di,offset temp
call getpciclass
mov si,di
mov ah,13
int 47h
mov si,offset poin
mov ah,13
int 47h
mov di,offset temp
call getpcisubclass call getpcisubclass
mov si,di push di
mov ah,13 ;classe
int 47h mov di,offset classe
mov ah,06 call getpciclass
int 47h push di
pop di cx ;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 inc ch
cmp ch,7 cmp ch,7
@ -157,31 +93,24 @@ xor cl,cl
inc al inc al
cmp al,16 cmp al,16
jbe search jbe search
db 0CBh retf
msg3 db ' Classe :',0 msg db "COS2000 hardware detecteur V1.6\lBIOS PCI version %hB.%hB a ete detecte !\lNombre de bus : %u\lCaracterisques PCI: ",0
msg1 db 'Peripherique :',0 msg2 db "Peripherique :%hW Constructeur :%hW Id :%hB.%hB.%hB Classe :%0.%0\l",0
msg2 db ' Constructeur :',0 return db "\l",0
msg4 db ' iD :',0 classe db 128 dup (0)
msg db 'COS2000 hardware detecteur V1.6',0 subclasse db 128 dup (0)
pcivers db 'BIOS PCI version ',0
pcivers2 db ' a ete detecte !',0
nbbuses db 'Nombre de bus : ',0
typesof db 'Caracterisques PCI: ',0
poin db '.',0
virg db ', ',0
spac db ' ',0
temp db 128 dup (0)
types dw config1 types dw config1
dw config2 dw config2
dw poin dw null
dw poin dw null
dw config3 dw config3
dw config4 dw config4
dw poin dw null
dw poin dw null
null db 'indefini',0
config1 db 'Config Mechanism 1',0 config1 db 'Config Mechanism 1',0
config2 db 'Config Mechanism 2',0 config2 db 'Config Mechanism 2',0
config3 db 'Special Cycle Mechanism 1',0 config3 db 'Special Cycle Mechanism 1',0
@ -194,12 +123,12 @@ infos db 256 dup (0)
;fonction 0-7 bus 0-255 device 0-31 ;fonction 0-7 bus 0-255 device 0-31
;renvoie en es:di de classe cl ;renvoie en es:di de classe dl
getpciclass: getpciclass:
push ax cx si di ds es push ax cx dx si di ds es
push es push es
push di push di
mov di,cx mov di,dx
and di,0FFh and di,0FFh
shl di,1 shl di,1
mov di,[offset classes+di] mov di,[offset classes+di]
@ -217,27 +146,27 @@ pop ds
pop di pop di
pop es pop es
rep movsb rep movsb
pop es ds di si cx ax pop es ds di si dx cx ax
ret ret
;renvoie en es:di la sous-classe de ch et de classe cl ;renvoie en es:di la sous-classe de dh et de classe dl
getpcisubclass: getpcisubclass:
push ax cx si di ds es push ax cx dx si di ds es
push es push es
push di push di
mov di,cx mov di,dx
and di,0FFh and di,0FFh
shl di,1 shl di,1
mov di,[offset classesd+di] mov di,[offset classesd+di]
xchg ch,cl xchg dh,dl
xor ch,ch xor dh,dh
cmp cx,80h cmp dx,80h
jne suiteac jne suiteac
mov di,offset divers mov di,offset divers
jmp found jmp found
suiteac: suiteac:
shl cx,1 shl dx,1
add di,cx add di,dx
mov di,[di] mov di,[di]
found: found:
mov cx,0FFh mov cx,0FFh
@ -254,7 +183,7 @@ pop ds
pop di pop di
pop es pop es
rep movsb rep movsb
pop es ds di si cx ax pop es ds di si dx cx ax
ret ret
divers db 'divers',0 divers db 'divers',0
@ -272,19 +201,30 @@ dw offset class9
dw offset class10 dw offset class10
dw offset class11 dw offset class11
dw offset class12 dw offset class12
class0 db 'Ancien',0 dw offset class13
class1 db 'Stockage',0 dw offset class14
class2 db 'Reseau',0 dw offset class15
class3 db 'Affichage',0 dw offset class16
class4 db 'Multimedia',0 dw offset class17
class5 db 'Memoire',0 class0 db 'ancien',0
class6 db 'Pont',0 class1 db 'stockage',0
class7 db 'Communication',0 class2 db 'reseau',0
class8 db 'Systeme',0 class3 db 'affichage',0
class9 db 'Acquisition',0 class4 db 'multimedia',0
class10 db 'Dock',0 class5 db 'memoire',0
class11 db 'Processeur',0 class6 db 'pont',0
class12 db 'Bus serie',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 ;Classes et sous classes
classesd: classesd:
@ -301,6 +241,11 @@ dw offset class9d
dw offset class10d dw offset class10d
dw offset class11d dw offset class11d
dw offset class12d dw offset class12d
dw offset class13d
dw offset class14d
dw offset class15d
dw offset class16d
dw offset class17d
class0d: class0d:
dw offset subclass00 dw offset subclass00
@ -313,30 +258,40 @@ dw offset subclass10
dw offset subclass11 dw offset subclass11
dw offset subclass12 dw offset subclass12
dw offset subclass13 dw offset subclass13
dw offset subclass14
subclass10 db 'scsi',0 subclass10 db 'scsi',0
subclass11 db 'ide',0 subclass11 db 'ide',0
subclass12 db 'disquette',0 subclass12 db 'disquette',0
subclass13 db 'ipi',0 subclass13 db 'ipi',0
subclass14 db 'raid',0
class2d: class2d:
dw offset subclass20 dw offset subclass20
dw offset subclass21 dw offset subclass21
dw offset subclass22 dw offset subclass22
dw offset subclass23
dw offset subclass24
subclass20 db 'ethernet',0 subclass20 db 'ethernet',0
subclass21 db 'token ring',0 subclass21 db 'token ring',0
subclass22 db 'fddi',0 subclass22 db 'fddi',0
subclass23 db 'atm',0
subclass24 db 'isdn',0
class3d: class3d:
dw offset subclass30 dw offset subclass30
dw offset subclass31 dw offset subclass31
dw offset subclass32
subclass30 db 'vga',0 subclass30 db 'vga',0
subclass31 db 'xga',0 subclass31 db 'xga',0
subclass32 db '3D',0
class4d: class4d:
dw offset subclass40 dw offset subclass40
dw offset subclass41 dw offset subclass41
dw offset subclass42
subclass40 db 'video',0 subclass40 db 'video',0
subclass41 db 'audio',0 subclass41 db 'audio',0
subclass42 db 'telephonie',0
class5d: class5d:
dw offset subclass50 dw offset subclass50
@ -353,6 +308,7 @@ dw offset subclass64
dw offset subclass65 dw offset subclass65
dw offset subclass66 dw offset subclass66
dw offset subclass67 dw offset subclass67
dw offset subclass68
subclass60 db 'hote',0 subclass60 db 'hote',0
subclass61 db 'isa',0 subclass61 db 'isa',0
subclass62 db 'eisa',0 subclass62 db 'eisa',0
@ -361,28 +317,41 @@ subclass64 db 'pci',0
subclass65 db 'pcmcia',0 subclass65 db 'pcmcia',0
subclass66 db 'nubus',0 subclass66 db 'nubus',0
subclass67 db 'cardbus',0 subclass67 db 'cardbus',0
subclass68 db 'RACEway',0
class7d: class7d:
dw offset subclass70 dw offset subclass70
dw offset subclass71 dw offset subclass71
dw offset subclass72
dw offset subclass73
subclass70 db 'serie',0 subclass70 db 'serie',0
subclass71 db 'parallele',0 subclass71 db 'parallele',0
subclass72 db 'serie multiport',0
subclass73 db 'modem',0
class8d: class8d:
dw offset subclass80 dw offset subclass80
dw offset subclass81 dw offset subclass81
dw offset subclass82 dw offset subclass82
dw offset subclass83
dw offset subclass84
subclass80 db 'pic',0 subclass80 db 'pic',0
subclass81 db 'dma',0 subclass81 db 'dma',0
subclass82 db 'timer',0 subclass82 db 'timer',0
subclass83 db 'rtc',0
subclass84 db 'hotplug',0
class9d: class9d:
dw offset subclass90 dw offset subclass90
dw offset subclass91 dw offset subclass91
dw offset subclass92 dw offset subclass92
dw offset subclass93
dw offset subclass94
subclass90 db 'clavier',0 subclass90 db 'clavier',0
subclass91 db 'stylo',0 subclass91 db 'stylo',0
subclass92 db 'souris',0 subclass92 db 'souris',0
subclass93 db 'scanner',0
subclass94 db 'joystick',0
class10d: class10d:
dw offset subclass100 dw offset subclass100
@ -406,11 +375,46 @@ dw offset subclass121
dw offset subclass122 dw offset subclass122
dw offset subclass123 dw offset subclass123
dw offset subclass124 dw offset subclass124
dw offset subclass125
subclass120 db 'firewire',0 subclass120 db 'firewire',0
subclass121 db 'access',0 subclass121 db 'access',0
subclass122 db 'ssa',0 subclass122 db 'ssa',0
subclass123 db 'usb',0 subclass123 db 'usb',0
subclass124 db 'smbus',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 ;bx pci version, cl nbbus, al pci type
getPciInfos: getPciInfos:
@ -539,4 +543,9 @@ pci_type2_detect:
endofdetectiontype2: endofdetectiontype2:
ret ret
imports:
db "VIDEO.LIB::print",0
print dd 0
dw 0
end start end start

View File

@ -1,10 +1,16 @@
.model tiny .model tiny
.386c .486
smart
.code .code
org 0100h
org 0h
include ..\include\mem.h
start: start:
header exe <,1,0,,,offset imports,,>
realstart:
mov ax,0305h mov ax,0305h
mov bx,0008h mov bx,0008h
int 16h int 16h
@ -43,62 +49,43 @@ Adres:
int 47h int 47h
mov bh,infos mov bh,infos
mov edi,ebp mov edi,ebp
mov ah,21
mov cl,7
int 47h
lines: lines:
xor edx,edx
mov dx,di
push edx
mov edx,edi mov edx,edi
shr edx,4*4 shr edx,4*4
shl edx,4*3 shl edx,4*3
mov cx,16 push edx
mov ah,10 push offset spaces
int 47h call [print]
mov si,offset dep
mov ah,13
int 47h
mov dx,di mov dx,di
mov ah,10
int 47h
mov ah,13
mov si,offset spaces
int 47h
mov ah,5
int 47h
mov al,infos+1 mov al,infos+1
mov cl,7
mov ah,21
int 47h
mov esi,edi mov esi,edi
doaline: doaline:
mov edx,edi mov edx,edi
shr edx,4*4 shr edx,4*4
shl edx,4*3 shl edx,4*3
mov fs,dx mov fs,dx
mov dl,fs:[di] push dword ptr fs:[di]
mov ah,10 push 8
mov cl,8 call [showhex]
int 47h push ' '
mov ah,5 call [showchar]
int 47h
inc edi inc edi
dec al dec al
jnz doaline jnz doaline
mov edi,esi mov edi,esi
mov si,offset spaces push offset spaces2
mov ah,13 call [print]
int 47h
mov al,infos+1 mov al,infos+1
mov ah,21
mov cl,7
int 47h
doaline2: doaline2:
mov edx,edi mov edx,edi
shr edx,4*4 shr edx,4*4
shl edx,4*3 shl edx,4*3
mov fs,dx mov fs,dx
mov dl,fs:[di] push word ptr fs:[di]
mov ah,7 call [showchar]
int 47h
inc edi inc edi
dec al dec al
jnz doaline2 jnz doaline2
@ -110,14 +97,12 @@ doaline2:
int 47h int 47h
jmp lines jmp lines
outes: outes:
mov ah,21
mov cl,112
int 47h
mov bh,0 mov bh,0
mov bl,infos mov bl,infos
mov si,offset menu mov ah,25
mov ah,14h
int 47h int 47h
push offset menu
call [print]
waitkey: waitkey:
mov ax,0 mov ax,0
int 16h int 16h
@ -153,18 +138,13 @@ outes:
suit6: suit6:
cmp ax,4100h cmp ax,4100h
jne suit7 jne suit7
mov ah,21
mov cl,116
int 47h
mov dword ptr [pope],'TIDE' mov dword ptr [pope],'TIDE'
mov bh,0
mov bl,infos mov bl,infos
xor bh,bh mov ah,25
mov si,offset menu
mov ah,14h
int 47h
mov ah,21
mov cl,7
int 47h int 47h
push offset menu
call [print]
mov ax,0B800h mov ax,0B800h
mov es,ax mov es,ax
mov xxyy2,3 mov xxyy2,3
@ -243,28 +223,20 @@ writs:
cmp ch,cl cmp ch,cl
je no je no
push si ax push si ax
mov ah,25 mov bh,0
mov bl,infos mov bl,infos
xor bh,bh mov ah,25
int 47h
mov ah,21
mov cl,117
int 47h
mov si,offset msg
mov ah,13
int 47h int 47h
push offset msg
call [print]
mov ax,0 mov ax,0
int 16h int 16h
mov bh,0
mov bl,infos mov bl,infos
xor bh,bh
mov ah,25 mov ah,25
int 47h int 47h
mov ah,21 push offset menu
mov cl,116 call [print]
int 47h
mov ah,13
mov si,offset menu
int 47h
pop bx si pop bx si
mov es:[bx-1],edi mov es:[bx-1],edi
mov es:[si-1],dx mov es:[si-1],dx
@ -289,8 +261,7 @@ cursor:
jne adres jne adres
mov ah,29h mov ah,29h
int 47h int 47h
db 0CBH ; +++++++ retf
ret
calc1: calc1:
push ax dx si push ax dx si
@ -377,14 +348,25 @@ yy dw 0
xxyy dw 3 xxyy dw 3
xxyy2 dw 3 xxyy2 dw 3
msg db 'Erreur : zone non modifiable (ROM) pressez une touche pour continuer ',0 msg db '\c74Erreur : zone non modifiable (ROM) pressez une touche pour continuer ',0
menu db 'haut/bas [F1/2] Offset [F3/4] Segment [F5/6] Mode F7, Quitter F8 MODE ' menu db '\c70haut/bas [F1/2] Offset [F3/4] Segment [F5/6] Mode F7, Quitter F8 MODE '
pope db 'VUE ',0 pope db 'VUE ',0
spaces db ' ³ ',0 spaces db '\c02%hW:%hW \c04| \c07',0
spaces2 db '\c04 | \c07',0
showbuffer db 35 dup (0FFh) showbuffer db 35 dup (0FFh)
oldmode db 0 oldmode db 0
infos db 40 dup (0) infos db 40 dup (0)
imports:
db "VIDEO.LIB::print",0
print dd 0
db "VIDEO.LIB::showhex",0
showhex dd 0
db "VIDEO.LIB::showchar",0
showchar dd 0
dw 0
end start end start

29
programs/exem-ce.asm Normal file
View File

@ -0,0 +1,29 @@
.model small
.486
smart
.code
org 0h
include ..\include\mem.h
start:
header exe <,1,0,,,offset imports,offset exports,>
realstart:
push offset message
call [affiche]
call [waitkey]
retf
message db 'Appel de la librairie video !',0
imports:
db "VIDEO.LIB::print",0
affiche dd 0
db "EXEM-LIB.LIB::waitkey",0
waitkey dd 0
dw 0
exports:
end start

25
programs/exem-lib.asm Normal file
View File

@ -0,0 +1,25 @@
.model tiny
.486
smart
.code
org 0h
include ..\include\mem.h
start:
header exe <,1,0,,,offset imports,offset exports,>
getvar2:
mov ax,0
int 16h
retf
imports:
exports:
db "waitkey",0
dw getvar2
dw 0
end start

View File

@ -3,133 +3,42 @@
smart smart
.code .code
org 0100h org 0h
include ..\include\mem.h
include ..\include\fat.h include ..\include\fat.h
start: start:
mov ah,2 header exe <,1,0,,,offset imports,,>
int 47h
mov ah,25 realstart:
mov bx,0 push offset msg1
int 47h call [print]
mov ah,21
mov cl,70h
int 47h
mov ah,13
mov si,offset msg1
int 47h
mov ah,21
mov cl,7
int 47h
mov ah,13
mov si,offset prompt
int 47h
mov ah,13
mov si,offset infos
int 47h
mov ah,13
mov si,offset prompt
int 47h
mov ah,3 mov ah,3
int 48h int 48h
xor bp,bp xor bp,bp
mov di,offset bufferentry mov di,offset bufferentry
mov si,di
mov ah,7 mov ah,7
int 48h int 48h
jc nofiles jc nofiles
go: go:
test [si+Entries.FileAttr],00010000b push word ptr [di+Entries.FileAttr]
je notdirectory push dword ptr [di+Entries.FileSize]
mov ah,21 push word ptr [di+Entries.FileTime]
mov cl,4 push word ptr [di+Entries.FileDate]
int 47h push word ptr [di+Entries.FileTimeCrea]
jmp notall push word ptr [di+Entries.FileDateCrea]
notdirectory: push di
cmp [si+Entries.FilExt],'E' push offset line
jne notexe call [print]
cmp [si+Entries.FilExt+1],'X'
jne notexe
cmp [si+Entries.FilExt+2],'E'
jne notexe
mov ah,21
mov cl,5
int 47h
jmp notall
notexe:
cmp [si+Entries.FilExt],'S'
jne notsys
cmp [si+Entries.FilExt+1],'Y'
jne notsys
cmp [si+Entries.FilExt+2],'S'
jne notsys
mov ah,21
mov cl,0Ah
int 47h
jmp notall
notsys:
mov ah,21
mov cl,7h
int 47h
notall:
mov ah,46
int 47h
mov ah,05
int 47h
int 47h
int 47h
mov ah,44
mov dx,[si+Entries.FileDateCrea]
int 47h
mov ah,05
int 47h
int 47h
int 47h
mov ah,45
mov dx,[si+Entries.FileTimeCrea]
int 47h
mov ah,05
int 47h
int 47h
int 47h
mov ah,44
mov dx,[si+Entries.FileDate]
int 47h
mov ah,05
int 47h
int 47h
int 47h
mov ah,45
mov dx,[si+Entries.FileTime]
int 47h
mov ah,05
int 47h
int 47h
int 47h
mov ah,48
mov edx,[si+Entries.FileSize]
int 47h
mov ah,05
int 47h
int 47h
int 47h
mov ah,47
mov dl,[si+Entries.FileAttr]
int 47h
mov ah,6
int 47h
inc bp inc bp
mov ah,8 mov ah,8
int 48h int 48h
jnc go jnc go
nofiles: nofiles:
mov ah,21 push offset menu
mov cl,70h call [print]
int 47h
mov ah,13
mov si,offset menu
int 47h
mov xx,1 mov xx,1
mov xxold,2 mov xxold,2
call Select call Select
@ -139,7 +48,7 @@ int 16h
cmp ah,50h cmp ah,50h
jne tre1 jne tre1
cmp xx,bp cmp xx,bp
je endof ja endof
inc xx inc xx
call select call select
jmp endof jmp endof
@ -157,14 +66,11 @@ tre2:
tre3: tre3:
cmp ah,59 cmp ah,59
jne tre4 jne tre4
jmp start jmp realstart
tre4: tre4:
cmp ah,67 cmp ah,67
jne endof jne endof
mov ah,15h retf
mov cl,7
int 47h
db 0CBh
;selectionne la ligne xx ;selectionne la ligne xx
Select: Select:
@ -186,12 +92,18 @@ ret
xx dw 1 xx dw 1
xxold dw 0 xxold dw 0
menu db '[F1] Lire disque [F9] Quitter ',0 menu db '\c70 [F1] Lire disque [F9] Quitter \c07',0
msg1 db ' Gestionnaire de fichier Version 1.5 ',0 msg1 db '\e\g00,00\c70 Gestionnaire de fichier Version 1.5 '
msg2 db 'Programme en cours de chargement',0 db '\g00,01\c07--------------------------------------------------------------------------------'
prompt db '--------------------------------------------------------------------------------',0 db '\g00,02Nom Ext. Date creation Date modification Taille Attributs'
infos db 'Nom Ext. Date creation Date modification Taille Attributs',0 db '\g00,03--------------------------------------------------------------------------------\l',0
line db '\c07%n %d %t %d %t %z %a\l',0
bufferentry db 512 dup (0) bufferentry db 512 dup (0)
imports:
db "VIDEO.LIB::print",0
print dd 0
dw 0
end start end start

39
programs/isa.asm Normal file
View File

@ -0,0 +1,39 @@
.model tiny
.486
smart
.code
org 0100h
start:
PNP_ADR_PORT equ 0x279
PNP_WRITE_PORT equ 0xA79
;MIN and MAX READ_ADDR must have the bottom two bits set
MIN_READ_ADDR equ 0x203
MAX_READ_ADDR equ 0x3FF
;READ_ADDR_STEP must be a multiple of 4
READ_ADDR_STEP equ 8
;bits
CONFIG_WAIT_FOR_KEY equ 0x02
CONFIG_RESET_CSN equ 0x04
IDENT_LEN equ 9
;renvoie le timer en ax
ctc:
cli
mov dx,043h
mov al,0
out dx,al
mov dx,40h
in al,dx
mov ah,al
in al,dx
sti
ret
;attend pendant ax microsecondes
usleep:
end start

View File

@ -1,10 +1,16 @@
.model tiny .model tiny
.386c .486
smart
.code .code
org 0100h
org 0h
include ..\include\mem.h
start: start:
header exe <,1,0,,,offset imports,,>
realstart:
mov ah,7 mov ah,7
mov cx,65535 mov cx,65535
int 49h int 49h
@ -34,7 +40,6 @@ jc problem2
push es push es
pop ds pop ds
xor si,si
mov ah,28h mov ah,28h
int 47h int 47h
@ -42,59 +47,68 @@ mov ax,0008h
int 47h int 47h
mov ah,2 mov ah,2
int 47h int 47h
mov cx,300 push 0
mov bx,30 call cs:[loadbmppalet]
mov ah,37 push 150
int 47h push 20
mov ah,15h push 0
mov cl,11 call cs:[showbmp]
int 47h jc problem4
push cs push cs
pop ds pop ds
mov ah,13 push offset poper
mov si,offset poper call [print]
int 47h endofit:
mov ax,0 xor ax,ax
int 16h int 16h
mov ah,29h mov ah,29h
int 47h int 47h
db 0CBH retf
problem: problem:
push cs push cs
pop ds pop ds
mov ah,13 push offset error
mov si,offset error call [print]
int 47h jmp endofit
mov ax,0
int 16h
db 0CBh
problem2: problem2:
push cs push cs
pop ds pop ds
mov ah,13 push offset error2
mov si,offset error2 call [print]
int 47h jmp endofit
mov ax,0
int 16h
db 0CBh
problem3: problem3:
push cs push cs
pop ds pop ds
mov ah,13 push offset error3
mov si,offset error3 call [print]
int 47h jmp endofit
mov ax,0
int 16h
db 0CBh
poper db 'COS2000 en mode graphique',0 problem4:
push cs
pop ds
push offset error4
call [print]
jmp endofit
poper db '\c0BC\c0CO\c0DS\c0E2\c0E0\c0E0\c0F0 en mode graphique',0
logo db 'cos.rip',0 logo db 'cos.rip',0
ok1 db 'Chargement de l''image OK',0 ok1 db 'Chargement de l''image OK',0
ok2 db 'Decompression de l''image OK',0 ok2 db 'Decompression de l''image OK',0
error3 db 'Une erreur est apparue lors de l''allocation de mémoire',0 error3 db '\c04Une erreur est apparue lors de l''allocation de mémoire',0
error db 'Une erreur est apparue lors du chargement de l''image',0 error db '\c04Une erreur est apparue lors du chargement de l''image',0
error2 db 'Une erreur est apparue lors de la decompression de l''image',0 error2 db '\c04Une erreur est apparue lors de la decompression de l''image',0
error4 db '\c0FUne erreur est apparue lors de l''affichage de l''image',0
imports:
db "VIDEO.LIB::print",0
print dd 0
db "BMP.LIB::showbmp",0
showbmp dd 0
db "BMP.LIB::loadbmppalet",0
loadbmppalet dd 0
dw 0
end start end start

View File

@ -3,87 +3,80 @@
smart smart
.code .code
org 0100h org 0h
include ..\include\mem.h include ..\include\mem.h
include ..\include\divers.h include ..\include\divers.h
start: start:
mov si,offset msg header exe <,1,0,,,offset imports,,>
mov ah,13
int 47h realstart:
mov ah,6 push offset msg
int 47h call [print]
mov si,offset menu
mov ah,13
int 47h
mov ah,6
int 47h
xor cx,cx xor cx,cx
listmcb: listmcb:
mov ah,4 mov ah,4
int 49h int 49h
jc fino jc fino
inc cx inc cx
mov ah,18h
int 47h ;placement mémoire
push gs
pop ds
mov bh,0
mov si,MB.Names
mov ah,14h
int 47h
mov bh,15
xor edx,edx
mov dx,ds:[MB.Sizes]
shl edx,4
mov ah,0Fh
int 47h
mov bh,24
cmp ds:[MB.IsResident],true
push cs
pop ds
jne notresident
mov si,offset resident
mov ah,14h
int 47h
jmp suitelistmcb
notresident:
mov si,offset nonresident
mov ah,14h
int 47h
suitelistmcb:
mov bh,30
cmp gs:[MB.Reference],0
je next
cmp gs:[MB.Reference],1000h
jb next
mov ax,gs:[MB.Reference]
dec ax
dec ax
mov ds,ax
mov si,MB.Names
mov ah,14h
int 47h
next:
mov bh,46
xor edx,edx
mov dx,gs mov dx,gs
inc dx inc dx
inc dx inc dx
push cx push edx
mov cx,16
mov ah,11h ;parent
int 47h cmp gs:[MB.Reference],0
pop cx je next
mov ah,6h mov dx,gs:[MB.Reference]
int 47h 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 jmp listmcb
fino: fino:
db 0CBh db 0CBh
resident db 'oui',0 resident db "oui",0
nonresident db 'non',0 nonresident db "non",0
msg db 'Memory manager V1.5',0 line db "%0P\h15%w\h24%0\h30%0P\h46%hW\l",0
menu db 'Nom | Taille | Res | Parent | Mem',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 end start

View File

@ -3,7 +3,7 @@
smart smart
.code .code
org 0100h org 0h
start: start:
mov eax,cr0 mov eax,cr0

View File

@ -3,15 +3,25 @@
smart smart
.code .code
org 0100h org 0h
include ..\include\mem.h
start: start:
mov si,offset message header exe <,1,0,,,offset imports,,>
mov ah,13
int 47h realstart:
mov ah,2 mov ah,2
int 74h int 74h
db 0CBh push offset message
call [print]
retf
message db 'Activation de la souris',0 message db 'Activation de la souris',0
imports:
db "VIDEO.LIB::print",0
print dd 0
dw 0
end start end start

View File

@ -2,195 +2,54 @@
.486 .486
smart smart
.code .code
org 0100h
org 0h
include ..\include\mem.h
start: start:
header exe <,1,0,,,offset imports,,>
realstart:
mov ah,28h mov ah,28h
int 47h int 47h
mov ax,0001
int 47h
mov ah,2
int 47h
mov si,offset text1 ;titre push word ptr 0FFFFh
mov ah,13 push dword ptr 652201
int 47h push dword ptr 1545454545
mov ah,6 push word ptr 1523
int 47h push word ptr 2041
int 47h push offset zero
mov ah,21 push offset fixe
mov cl,3 push word ptr 5
int 47h push word ptr 'i'
mov ah,13 push word ptr 'a'
mov si,offset text2 push dword ptr 5041
int 47h push dword ptr 125645
mov ah,6 push dword ptr 5041
int 47h push dword ptr 125645
mov edx,2612182686 push dword ptr 5041
mov ah,8 push dword ptr 125645
int 47h push offset message
mov ah,6 call [print]
int 47h
mov edx,7576534
mov ah,8
int 47h
mov ah,6
int 47h
mov ah,21
mov cl,4
int 47h
mov si,offset text3
mov ah,13
int 47h
mov ah,6
int 47h
mov edx,-6876253
mov cx,32
mov ah,9
int 47h
mov ah,6
int 47h
mov edx,-311212323
mov cx,32
mov ah,9
int 47h
mov ah,6
int 47h
mov ah,21
mov cl,5
int 47h
mov ah,13
mov si,offset text4
int 47h
mov ah,6
int 47h
mov edx,0892325457
mov cx,16
mov ah,10
int 47h
mov ah,6
int 47h
mov edx,0236514
mov ah,10
mov cx,32
int 47h
mov ah,6
int 47h
mov ah,21
mov cl,6
int 47h
mov ah,13
mov si,offset text5
int 47h
mov ah,6
int 47h
mov edx,3762182686
mov ah,11
mov cx,32
int 47h
mov ah,6
int 47h
mov edx,2182686
mov ah,11
mov cx,16
int 47h
mov ah,6
int 47h
mov ah,21
mov cl,7
int 47h
mov ah,13
mov si,offset text6
int 47h
mov ah,6
int 47h
mov dl,'h'
mov ah,7
int 47h
mov ah,6
int 47h
mov dl,'@'
mov ah,7
int 47h
mov ah,6
int 47h
mov ah,21
mov cl,8
int 47h
mov ah,13
mov si,offset text7
int 47h
mov ah,6
int 47h
mov si,offset textt
mov ah,13
int 47h
mov ah,6
int 47h
mov si,offset texttt
mov ah,13
int 47h
mov ah,6
int 47h
mov ah,21
mov cl,9
int 47h
mov ah,13
mov si,offset text71
int 47h
mov ah,6
int 47h
mov dx,0BF30h
mov ah,44
int 47h
mov ah,6
int 47h
mov dx,0B0B6h
mov ah,44
int 47h
mov ah,6
int 47h
mov ah,13
mov si,offset text72
int 47h
mov ah,6
int 47h
mov edx,8601h
mov ah,45
int 47h
mov ah,6
int 47h
mov dx,0B0B6h
mov ah,45
int 47h
mov ah,6
int 47h
mov ax,0 mov ax,0
int 16h int 16h
mov ah,2 mov ah,2
int 47h int 47h
mov ah,30 mov ah,30
int 47h int 47h
mov ah,2 mov ah,2
int 47h int 47h
mov ah,21
mov cl,5
int 47h
mov cx,200 mov cx,200
go1: go1:
mov ah,30 mov ah,30
int 47h int 47h
mov ah,33 mov ah,33
int 47 int 47
mov ah,20 push offset textdemo1
xor bh,bh call [print]
inc bl
mov si,offset text8
int 47h
call put call put
mov ah,30 mov ah,30
int 47h int 47h
@ -199,20 +58,14 @@ int 47h
dec cx dec cx
jnz go1 jnz go1
mov ah,21
mov cl,7
int 47h
mov cx,200 mov cx,200
go2: go2:
mov si,offset text9
mov ah,30 mov ah,30
int 47h int 47h
mov ah,33 mov ah,33
int 47h int 47h
mov ah,6 push offset textdemo2
int 47h call [print]
mov ah,13
int 47h
call put call put
mov ah,30 mov ah,30
int 47h int 47h
@ -221,20 +74,14 @@ int 47h
dec cx dec cx
jnz go2 jnz go2
mov ah,21
mov cl,9
int 47h
mov cx,200 mov cx,200
go3: go3:
mov si,offset text10
mov ah,30 mov ah,30
int 47h int 47h
mov ah,33 mov ah,33
int 47h int 47h
xor bh,bh push offset textdemo3
inc bl call [print]
mov ah,20
int 47h
call put call put
mov ah,30 mov ah,30
int 47h int 47h
@ -247,14 +94,8 @@ mov ah,30
int 47h int 47h
mov ah,2 mov ah,2
int 47h int 47h
mov bx,040Dh push offset texte2
mov si,offset texte1 call [print]
mov ah,20
int 47h
mov si,offset texte2
inc bl
mov ah,20
int 47h
mov ah,30 mov ah,30
int 47h int 47h
mov ah,2 mov ah,2
@ -262,9 +103,6 @@ int 47h
mov ah,30 mov ah,30
int 47h int 47h
mov cl,12
mov ah,21
int 47h
mov bp,255 mov bp,255
xor edx,edx xor edx,edx
go4: go4:
@ -273,32 +111,28 @@ int 47h
mov ah,33 mov ah,33
int 47h int 47h
inc edx inc edx
mov ah,11 push edx
mov cx,16 push offset texte3
int 47h call [print]
mov ah,6
int 47h
mov ah,30 mov ah,30
int 47h int 47h
mov ah,33 mov ah,33
int 47h int 47h
dec bp dec bp
jnz go4 jnz go4
mov ah,14h push offset texte4
xor bx,bx call [print]
mov si,offset texte3
int 47h
mov ax,0 mov ax,0
int 16h int 16h
mov ah,29h mov ah,29h
int 47h int 47h
db 0CBh retf
put: put:
call random call random
mov di,dx mov di,dx
and di,4096-2 and di,4096-2
mov si,offset text11 mov si,offset fond
call showstring2 call showstring2
ret ret
@ -322,24 +156,27 @@ mov cs:randseed,dx
pop dx cx ax pop dx cx ax
ret ret
texttt db 'Texte',0 zero db 'Chaine a zro terminal',0
textt db 'Divers',0 fixe db 20,'Chaine a taille fixe'
text1 db ' Dmonstration de l''utilisation de la bibliothŠque VIDEO',0 message db "\m01\e\c07\h01Dmonstration de la librairie VIDEO.LIB\l\l"
text2 db 'Nombre entier :',0 db "\c01Nombres entiers ou signs (%%u/%%i):\l%u\l%iD\l"
text3 db 'Nombre sign :',0 db "\c02Nombre hexadcimaux (%%h):\l%hD\l%hW\l"
text4 db 'Nombre hxadcimal :',0 db "\c03Nombres Binaires (%%b):\l%bD\l%bB\l"
text5 db 'Nombre binaire :',0 db "\c04Caracteres simples ou multiples (%%c/%%cM):\l%c\l%cM\l"
text6 db 'CaractŠres :',0 db "\c05Chaines a zro terminal ou fixes (%%0/%%s):\l%s\l%0\l"
text7 db 'Texte :',0 db "\c06Dates et heures (%%t/%%d):\l%t\l%d\l"
text71 db 'Date :',0 db "\c07Nombre a echelle automatique (%%z):\l%z\l%z\l"
text72 db 'Heure :',0 db "\c08Attributs de fichiers (%%a):\l%a",0
text8 db 'Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling',0
text9 db 'Vertical Vertical Vertical Vertical Vertical Vertical Vertical Vertical',0 fond db 16,'Ceci est un fond'
text10 db 'Rapide Rapide Rapide Rapide Rapide Rapide Rapide Rapide',0 textdemo1 db '\c05Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling Scrolling\l',0
text11 db 'Echange rapide de pages Vido',0 textdemo2 db '\c07Vertical Vertical Vertical Vertical Vertical Vertical Vertical Vertical\l',0
texte1 db 'Routine d''affichage Ultra Rapide Agissant sur le Matriel',0 textdemo3 db '\c09Rapide Rapide Rapide Rapide Rapide Rapide Rapide Rapide\l',0
texte2 db 'Possibilit de raliser des effets de superposition',0 texte1 db 'Echange rapide de pages Vido',0
texte3 db 'Sauvegarde et restauration de l''ecran',0 texte2 db '\g04,13Routine d''affichage Ultra Rapide Agissant sur le Matriel'
db '\g04,14Possibilit de raliser des effets de superposition',0
texte3 db '\c04%bD\l',0
texte4 db '\g01,00Sauvegarde et restauration de l''ecran (%%s/%%r)',0
showstring2: showstring2:
push es bx cx si di push es bx cx si di
@ -358,6 +195,9 @@ strinaize4:
pop di si cx bx es pop di si cx bx es
ret ret
imports:
db "VIDEO.LIB::print",0
print dd 0
dw 0
end start end start

View File

@ -1,31 +1,23 @@
.model tiny .model tiny
.386c .386c
.code .code
org 0100h org 0h
include ..\include\mem.h
start: start:
header exe <,1,0,,,offset imports,,>
realstart:
mov ah,28h mov ah,28h
int 47H
mov ax,0002
int 47H
replay:
mov ah,2
int 47h int 47h
mov ah,21 push offset msg
mov cl,7 call [print]
int 47h mov bp,1000h
xor di,di xor di,di
xor cx,cx xor cx,cx
mov ah,20 xor edx,edx
mov bx,1D00h
mov si,offset Msg
int 47h
mov ah,20
mov bx,0231h
mov si,offset msgapp
int 47h
mov bp,1000h
VerifAll: VerifAll:
mov ah,1 mov ah,1
int 16h int 16h
@ -33,126 +25,89 @@ VerifAll:
cmp al,' ' cmp al,' '
je enend je enend
nokey: nokey:
mov dx,di
push edx
mov dx,cx
inc dx
push edx
mov ax,cx mov ax,cx
inc ax inc ax
mov si,100 mov si,100
mul si mul si
mov si,2880 mov si,2880
div si div si
xor edx,edx
mov dx,ax mov dx,ax
mov ah,15 push edx
mov bx,0A14h push offset msg2
int 47h call [print]
mov ah,13
mov si,offset po
int 47h
mov ah,15
mov dx,cx
inc dx
mov bx,0A10h
int 47h
mov ah,13
mov si,offset Msg2
int 47h
mov ah,8
mov edx,0
mov dx,di
int 47h
mov ah,13
mov si,offset Msg3
int 47h
call gauge call gauge
mov ah,2 mov ah,2
int 48h int 48h
jc errors jc errors
je noprob je noprob
inc di inc di
noprob: noprob:
inc cx inc cx
cmp cx,2880 cmp cx,2880
jnz verifall jnz verifall
enend: enend:
cmp di,0 cmp di,0
je noatall je noatall
mov bx,0E09h push offset error2
mov ah,20 call [print]
mov si,offset error2
int 47h
jmp someof jmp someof
noatall: noatall:
mov bx,0E09h push offset noerror
mov ah,20 call [print]
mov si,offset noerror someof:
int 47h
someof:
mov ah,0 mov ah,0
int 16h int 16h
mov ah,29h mov ah,29h
int 47H int 47H
db 0CBH retf
errors: errors:
mov ah,21 push offset error
mov cl,4 call [print]
int 47h mov ah,0
mov bx,0D09h int 16h
mov ah,20
mov si,offset errore
int 47h
mov ah,0
int 16h
mov ah,29h mov ah,29h
int 47H int 47H
db 0CBH retf
errore db 'Erreur avec le lecteur de disquette !',0 error db '\g10,10Erreur avec le lecteur de disquette !',0
noerror db 'Pas de secteurs defectueux, appuyez sur une touche pour continuer',0 error2 db '\g10,10Le disque est defectueux, appuyez sur une touche pour quitter',0
error2 db 'Le disque est defectueux, appuyez sur une touche pour quitter',0 noerror db '\g10,10Pas de secteurs defectueux, appuyez sur une touche pour continuer',0
po db ' %',0 msg db '\m02\e\c07\g29,00- Test de surface du disque -\g02,49<Pressez espace pour quitter>',0
msgapp db '<Pressez espace pour quitter>',0 msg2 db '\g10,20%u %%\g10,16%u cluster testes. \h34%u cluster defectueux. ',0
msg db '- Test de surface du disque -',0
msg2 db ' cluster testes. ',0
msg3 db ' cluster defectueux. ',0
;->Increment CX
gauge: gauge:
push ax bx cx dx si ds push ax dx
push cs mov ax,cx
pop ds mul sizeof
mov ax,cx div max
mul sizes xor edx,edx
div max mov dx,sizeof
mov dx,ax sub dx,ax
mov bl,oldvalue push dx
xor bh,bh push 'Û'
mov byte ptr [offset gaugetxt+bx],'Û' mov dx,ax
cmp bx,0 push dx
jnz nono2 push 'Û'
mov ah,21 push offset gauges
mov cl,8 call [print]
int 47h pop dx ax
mov bx,xy retn
mov ah,20
mov si,offset gaugetxt max dw 2879
int 47h sizeof dw 50
mov ah,21
mov cl,7 gauges db '\g10,18\c05%cM\c07%cM',0
int 47h
nono2: imports:
mov bx,dx db "VIDEO.LIB::print",0
xor bh,bh print dd 0
mov byte ptr [offset gaugetxt+bx],0 dw 0
mov oldvalue,bl
mov bx,xy
mov ah,20
mov si,offset gaugetxt
int 47h
pop ds si dx cx bx ax
ret
oldvalue db 0
max dw 2880
sizes dw 50
xy dw 0A12h
gaugetxt db 'ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ',0
End Start End Start

View File

@ -1,10 +1,16 @@
.model tiny .model tiny
.386c .486
smart
.code .code
org 0100h
org 0h
include ..\include\mem.h
start: start:
header exe <,1,0,,,offset imports,,>
realstart:
mov ax,0305h mov ax,0305h
mov bx,0008h mov bx,0008h
int 16h int 16h
@ -38,12 +44,8 @@ Adres:
mov bl,infos mov bl,infos
xor bh,bh xor bh,bh
int 47h int 47h
mov ah,21 push offset errordisk
mov cl,116 call [print]
int 47h
mov ah,13
mov si,offset errordisk
int 47h
mov ax,0 mov ax,0
int 16h int 16h
noerror: noerror:
@ -71,52 +73,32 @@ Adres:
int 47h int 47h
mov bh,infos mov bh,infos
mov di,bp mov di,bp
mov ah,21
mov cl,7
int 47h
lines: lines:
mov dx,sect xor edx,edx
mov cx,16
mov ah,10
int 47h
mov si,offset dep
mov ah,13
int 47h
mov dx,di mov dx,di
mov ah,10 push edx
int 47h mov dx,sect
mov ah,13 push edx
mov si,offset spaces push offset spaces
int 47h call [print]
mov ah,5
int 47h
mov al,infos+1 mov al,infos+1
mov cl,7
mov ah,21
int 47h
mov si,di mov si,di
doaline: doaline:
mov dl,[di+offset buffer] push dword ptr [di+offset buffer]
mov ah,10 push 8
mov cl,8 call [showhex]
int 47h push ' '
mov ah,5 call [showchar]
int 47h
inc di inc di
dec al dec al
jnz doaline jnz doaline
mov di,si mov di,si
mov si,offset spaces push offset spaces2
mov ah,13 call [print]
int 47h
mov al,infos+1 mov al,infos+1
mov ah,21
mov cl,7
int 47h
doaline2: doaline2:
mov dl,[di+offset buffer] push word ptr [di+offset buffer]
mov ah,7 call [showchar]
int 47h
inc di inc di
dec al dec al
jnz doaline2 jnz doaline2
@ -128,14 +110,12 @@ doaline2:
int 47h int 47h
jmp lines jmp lines
outes: outes:
mov ah,21
mov cl,112
int 47h
mov bh,0 mov bh,0
mov bl,infos mov bl,infos
mov si,offset menu mov ah,25
mov ah,14h
int 47h int 47h
push offset menu
call [print]
waitkey: waitkey:
mov ax,0 mov ax,0
int 16h int 16h
@ -183,19 +163,12 @@ outes:
cmp ax,4100h cmp ax,4100h
jne suit7 jne suit7
mov dword ptr [pope],'TIDE' mov dword ptr [pope],'TIDE'
mov bh,0
mov bl,infos mov bl,infos
xor bh,bh
mov ah,25 mov ah,25
int 47h int 47h
mov ah,21 push offset menu
mov cl,116 call [print]
int 47h
mov si,offset menu
mov ah,13
int 47h
mov ah,21
mov cl,7
int 47h
mov ax,0B800h mov ax,0B800h
mov es,ax mov es,ax
mov xxyy2,3 mov xxyy2,3
@ -290,8 +263,7 @@ cursor:
jne adres2 jne adres2
mov ah,29h mov ah,29h
int 47H int 47H
db 0CBH retf
ret
calc1: calc1:
push ax dx si push ax dx si
@ -375,16 +347,28 @@ xx dw 0
yy dw 0 yy dw 0
xxyy dw 3 xxyy dw 3
xxyy2 dw 3 xxyy2 dw 3
errordisk db 'Une erreur est apparue sur le lecteur, appuyez sur une touche ',0
menu db 'Haut&Bas [F1/2] Secteur [F3/4] Charger/Sauver [F5/6] Mode [F7] Quit. [F8] ' errordisk db '\c74Une erreur est apparue sur le lecteur, appuyez sur une touche ',0
pope db 'VIEW',0 menu db '\c70Haut&Bas [F1/2] Secteur [F3/4] Charger/Sauver [F5/6] Mode [F7] Quit. [F8] '
spaces db ' ³ ',0 pope db 'VUE ',0
spaces db '\c02%hW:%hW \c04| \c07',0
spaces2 db '\c04 | \c07',0
showbuffer db 35 dup (0FFh) showbuffer db 35 dup (0FFh)
oldmode db 0 oldmode db 0
infos db 40 dup (0) infos db 40 dup (0)
buffer db 2048 dup (0) buffer db 2048 dup (0)
imports:
db "VIDEO.LIB::print",0
print dd 0
db "VIDEO.LIB::showhex",0
showhex dd 0
db "VIDEO.LIB::showchar",0
showchar dd 0
dw 0
end start end start