Merge branch 'release/1.0.0'
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 111 KiB |
After Width: | Height: | Size: 51 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 126 KiB |
|
@ -0,0 +1,268 @@
|
|||
![logo](https://github.com/dahut87/cos2000v1/raw/master/graphisme/logo.png)
|
||||
## Documentation d'origine (importée)
|
||||
|
||||
COS 2000
|
||||
Compatible Operating System
|
||||
|
||||
|
||||
|
||||
Présentation
|
||||
Comment l’installer
|
||||
Mode d’emploi
|
||||
Faire un programme pour COS
|
||||
Liste des APIs
|
||||
En cas de problème
|
||||
|
||||
mailto:nicolas@palon.fr
|
||||
|
||||
|
||||
Présentation
|
||||
|
||||
COS2000, par définition, est système d'exploitation. Celui-ci prend la direction des opérations à partir du moment où le PC est mis sous tension (Après le BIOS). Il gère tous les périphériques rattachés au PC et offre aux programmeurs les moyens de développer des applications compatibles en fournissant des APIs (Application Programming Interface). COS2000 est basé sur un concept particulier qui est d'offrir aux programmeurs un maximum de fonctions intégrées pour faciliter le travail des programmeurs et réduire la taille des programmes.
|
||||
|
||||
Comment l'installer ?
|
||||
|
||||
Pour installer COS2000 :
|
||||
|
||||
Sous dos/windows
|
||||
|
||||
Insérez une disquette 1.44 Mo vierge ou inutile dans votre lecteur.
|
||||
Lancez le programme SETUP.COM situé dans le dossier de COS2000.
|
||||
- Si celui ci ne détecte pas d'erreur, COS2000 est installé !
|
||||
|
||||
Sous Linux
|
||||
|
||||
Insérez une disquette 1.44 Mo vierge ou inutile dans votre lecteur.
|
||||
Lancez le programme SETUP.SH situé dans le dossier de COS2000.
|
||||
- Si celui ci ne détecte pas d'erreur, COS2000 est installé !
|
||||
|
||||
Pour lancer COS2000 :
|
||||
|
||||
Insérez la disquette où COS2000 est installé.
|
||||
Veillez que dans le BIOS vous puissiez démarrer à partir de A:.
|
||||
Redémarrer votre ordinateur et vous serez sur COS2000.
|
||||
|
||||
|
||||
|
||||
Mode d'emploi
|
||||
|
||||
L’interpréteur de commande COS est le premier logiciel qui est lancé au démarrage. A partir de celui-ci vous pouvez exécuter quelques commandes ou logiciels.
|
||||
|
||||
En plus des logiciels, l'interpréteur de commandes peut exécuter 6 commandes :
|
||||
|
||||
QUIT
|
||||
Quitte l'interpréteur.
|
||||
|
||||
VERS
|
||||
Donne la version de COS2000.
|
||||
|
||||
EFFAC
|
||||
Efface l'écran.
|
||||
|
||||
REDEM
|
||||
Redémarre le PC.
|
||||
|
||||
CMDS
|
||||
Donne la liste des commandes disponibles.
|
||||
|
||||
MODE [mode]
|
||||
Permet de changer de mode vidéo. [mode] doit être un entier compris entre 1 et 9. les modes au delà de 4 sont des modes graphiques à texte émulé. Il est déconseillé de les utiliser car il est parfois impossible de revenir aux modes texte.
|
||||
|
||||
LIRE
|
||||
Permet de lire un support disquette 1.44 Mo au format FAT12.
|
||||
|
||||
CH
|
||||
Change le dossier actuel vers celui spécifié.
|
||||
|
||||
VOIR
|
||||
Permet de lister le contenu du dossier actuel.
|
||||
|
||||
|
||||
Faire un programme pour COS
|
||||
|
||||
Toute contribution à COS 2000 en terme de programme est la bienvenue, un répertoire « contribs » contiendra les programmes des différents contributeurs. Aucune modification a ceux-ci ne sera faire sans l’accord explicite de l’auteur. Pour une contribution écrivez moi a l’adresse mailto:nicolas@palon.fr.
|
||||
|
||||
Pour l’instant il n’y a aucun formatage particulier du code à respecter pour faire un programme pour COS 2000. Il faut pour l’instant seulement un point d’entrée en 0100h comme un .COM de dos, 64 Ko sont donc disponible au programme, la pile utilisé est celle du système d’exploitation, c’est donc le seul segment qui ne sera pas initialisé comme les autres.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Pour clore le programme il suffit de faire un retour far.
|
||||
Exemple avec un Hello Word.
|
||||
|
||||
Avec tasm
|
||||
|
||||
.model tiny ;model tiny (.com)
|
||||
.486 ;Pour processeur 80486
|
||||
Smart ;Optimisations
|
||||
.code ;Segment de code
|
||||
|
||||
org 0100h ;Point d’entré en 0100h
|
||||
|
||||
start:
|
||||
mov ah,0Dh
|
||||
mov si,offset msg
|
||||
int 47h ;Afficher le texte pointé par DS:SI (Showstring0)
|
||||
xor ax,ax
|
||||
int 16h ;Attendre l’appuie sur une touche
|
||||
db 0CBH ;retour far
|
||||
|
||||
msg db ‘Hello World’,0
|
||||
end start
|
||||
|
||||
Avec nasm
|
||||
|
||||
[bits 16] ;16 bits
|
||||
[org 0x0100] ;Point d’entré en 0100h
|
||||
section .text ;Segment de code
|
||||
|
||||
start:
|
||||
mov ah,0x0D
|
||||
mov si,msg
|
||||
int 0x47 ;Afficher le texte pointé par DS:SI (Showstring0)
|
||||
xor ax,ax
|
||||
int 0x16 ;Attendre l’appuie sur une touche
|
||||
retf ;retour far
|
||||
|
||||
msg db ‘Hello World’,0
|
||||
|
||||
|
||||
Comme vous pouvez le constater l’appel des APIs de Cos se réalise par le biais d’interruptions logiciels dont voici la liste.
|
||||
|
||||
Liste des APIs
|
||||
|
||||
disque.sys : Gestionnaires FAT12 et Disquette
|
||||
Interruption 48h (Disquette uniquement)
|
||||
|
||||
00h readsector
|
||||
01h writesector
|
||||
02h verifysector
|
||||
03h initdrive
|
||||
04h loadfile
|
||||
05h compressrle
|
||||
06h decompressrle
|
||||
07h findfirstfile
|
||||
08h getfreespace
|
||||
09h searchfile
|
||||
0Ah getname
|
||||
0Bh getserial
|
||||
0Ch changedir
|
||||
0Dh readcluster
|
||||
0Eh writecluster
|
||||
0Fh getdir
|
||||
|
||||
port.sys : Gestionnaires port parallèle
|
||||
Interruption 0Dh (LPT1) ou 0Fh (LPT2)
|
||||
|
||||
00h getlptin
|
||||
01h getlptout
|
||||
02h getlptinout
|
||||
03h setlptin
|
||||
04h setlptout
|
||||
05h setlptinout
|
||||
06h getlpt
|
||||
07h getfirstlpt
|
||||
08h setemettor
|
||||
09h setreceptor
|
||||
0Ah settimeout
|
||||
0Bh gettimeout
|
||||
0Ch receivelpt
|
||||
0Dh sendlpt
|
||||
0Eh receivelptblock
|
||||
0Fh sendlptblock
|
||||
10h receivecommand
|
||||
11h sendcommand
|
||||
|
||||
souris.sys : Gestionnaires souris
|
||||
Interruption 74h (PS/2)
|
||||
|
||||
00h cmdmouse
|
||||
01h cmdmouse2
|
||||
02h detectmouse
|
||||
03h getmouse
|
||||
04h getmousescreen
|
||||
05h configmouse
|
||||
|
||||
8259a.sys : Gestionnaires contrôleur d'interruption programmable
|
||||
Interruption 50h (Maître et esclave)
|
||||
|
||||
00h enableirq
|
||||
01h disableirq
|
||||
02h readmaskirq
|
||||
03h readirr
|
||||
04h readisr
|
||||
05h installhandler
|
||||
06h replacehandler
|
||||
07h getint
|
||||
08h setint
|
||||
09h seteoi
|
||||
|
||||
video.sys : Gestionnaires de la carte vidéo
|
||||
Interruption 47h (VGA)
|
||||
|
||||
00h setvideomode
|
||||
01h getvideomode
|
||||
02h cleartext
|
||||
03h changefont
|
||||
04h loadfont
|
||||
05h space
|
||||
06h line
|
||||
07h showchar
|
||||
08h showint
|
||||
09h showsigned
|
||||
0Ah showhex
|
||||
0Bh showbin
|
||||
0Ch showstring
|
||||
0Dh showstring0
|
||||
0Eh showcharat
|
||||
0Fh showintat
|
||||
10h showsignedat
|
||||
11h showhexat
|
||||
12h showbinat
|
||||
13h showstringat
|
||||
14h showstring0at
|
||||
15h setcolor
|
||||
16h getcolor
|
||||
17h scrolldown
|
||||
18h getxy
|
||||
19h setxy
|
||||
1Ah savescreen
|
||||
1Bh restorescreen
|
||||
1Ch page2to1
|
||||
1Dh page1to2
|
||||
1Eh xchgPages
|
||||
1Fh savepage1
|
||||
20h changelineattr
|
||||
21h waitretrace
|
||||
22h getinfos
|
||||
23h loadbmp
|
||||
24h showbmp
|
||||
25h clearscr
|
||||
26h savedac
|
||||
27h restoredac
|
||||
28h savestate
|
||||
29h restorestate
|
||||
30h enablescroll
|
||||
31h disablescroll
|
||||
32h showdate
|
||||
33h showtime
|
||||
34h showname
|
||||
35h showattr
|
||||
36h showsize
|
||||
|
||||
Pour l’instant je n’ai pas fait de guide détaillé de l’utilisation des fonctions de COS… A venir
|
||||
|
||||
Les possibilités de COS2000 sont aujourd'hui très limitées car il est en cours de développement.
|
||||
|
||||
En cas de problèmes
|
||||
|
||||
Si des bugs surviennent ou si COS2000 ne veut pas s'installer, veuillez s'il vous plaît m'envoyer un E Mail à :
|
||||
|
||||
mailto:nicolas@palon.fr
|
||||
|
||||
COS2000 n'exploite pas les disques durs, il est donc impossible qu'il altère de quelque manière que ce soit vos données !!!!!!!!!!!!!
|
|
@ -0,0 +1,675 @@
|
|||
### GNU GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
<https://fsf.org/>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this
|
||||
license document, but changing it is not allowed.
|
||||
|
||||
### Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom
|
||||
to share and change all versions of a program--to make sure it remains
|
||||
free software for all its users. We, the Free Software Foundation, use
|
||||
the GNU General Public License for most of our software; it applies
|
||||
also to any other work released this way by its authors. You can apply
|
||||
it to your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you
|
||||
have certain responsibilities if you distribute copies of the
|
||||
software, or if you modify it: responsibilities to respect the freedom
|
||||
of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the
|
||||
manufacturer can do so. This is fundamentally incompatible with the
|
||||
aim of protecting users' freedom to change the software. The
|
||||
systematic pattern of such abuse occurs in the area of products for
|
||||
individuals to use, which is precisely where it is most unacceptable.
|
||||
Therefore, we have designed this version of the GPL to prohibit the
|
||||
practice for those products. If such problems arise substantially in
|
||||
other domains, we stand ready to extend this provision to those
|
||||
domains in future versions of the GPL, as needed to protect the
|
||||
freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish
|
||||
to avoid the special danger that patents applied to a free program
|
||||
could make it effectively proprietary. To prevent this, the GPL
|
||||
assures that patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
### TERMS AND CONDITIONS
|
||||
|
||||
#### 0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds
|
||||
of works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of
|
||||
an exact copy. The resulting work is called a "modified version" of
|
||||
the earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user
|
||||
through a computer network, with no transfer of a copy, is not
|
||||
conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices" to
|
||||
the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
#### 1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work for
|
||||
making modifications to it. "Object code" means any non-source form of
|
||||
a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users can
|
||||
regenerate automatically from other parts of the Corresponding Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that same
|
||||
work.
|
||||
|
||||
#### 2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not convey,
|
||||
without conditions so long as your license otherwise remains in force.
|
||||
You may convey covered works to others for the sole purpose of having
|
||||
them make modifications exclusively for you, or provide you with
|
||||
facilities for running those works, provided that you comply with the
|
||||
terms of this License in conveying all material for which you do not
|
||||
control copyright. Those thus making or running the covered works for
|
||||
you must do so exclusively on your behalf, under your direction and
|
||||
control, on terms that prohibit them from making any copies of your
|
||||
copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under the
|
||||
conditions stated below. Sublicensing is not allowed; section 10 makes
|
||||
it unnecessary.
|
||||
|
||||
#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such
|
||||
circumvention is effected by exercising rights under this License with
|
||||
respect to the covered work, and you disclaim any intention to limit
|
||||
operation or modification of the work as a means of enforcing, against
|
||||
the work's users, your or third parties' legal rights to forbid
|
||||
circumvention of technological measures.
|
||||
|
||||
#### 4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
#### 5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these
|
||||
conditions:
|
||||
|
||||
- a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
- b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under
|
||||
section 7. This requirement modifies the requirement in section 4
|
||||
to "keep intact all notices".
|
||||
- c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
- d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
#### 6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms of
|
||||
sections 4 and 5, provided that you also convey the machine-readable
|
||||
Corresponding Source under the terms of this License, in one of these
|
||||
ways:
|
||||
|
||||
- a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
- b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the Corresponding
|
||||
Source from a network server at no charge.
|
||||
- c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
- d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
- e) Convey the object code using peer-to-peer transmission,
|
||||
provided you inform other peers where the object code and
|
||||
Corresponding Source of the work are being offered to the general
|
||||
public at no charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal,
|
||||
family, or household purposes, or (2) anything designed or sold for
|
||||
incorporation into a dwelling. In determining whether a product is a
|
||||
consumer product, doubtful cases shall be resolved in favor of
|
||||
coverage. For a particular product received by a particular user,
|
||||
"normally used" refers to a typical or common use of that class of
|
||||
product, regardless of the status of the particular user or of the way
|
||||
in which the particular user actually uses, or expects or is expected
|
||||
to use, the product. A product is a consumer product regardless of
|
||||
whether the product has substantial commercial, industrial or
|
||||
non-consumer uses, unless such uses represent the only significant
|
||||
mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to
|
||||
install and execute modified versions of a covered work in that User
|
||||
Product from a modified version of its Corresponding Source. The
|
||||
information must suffice to ensure that the continued functioning of
|
||||
the modified object code is in no case prevented or interfered with
|
||||
solely because modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or
|
||||
updates for a work that has been modified or installed by the
|
||||
recipient, or for the User Product in which it has been modified or
|
||||
installed. Access to a network may be denied when the modification
|
||||
itself materially and adversely affects the operation of the network
|
||||
or violates the rules and protocols for communication across the
|
||||
network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
#### 7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders
|
||||
of that material) supplement the terms of this License with terms:
|
||||
|
||||
- a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
- b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
- c) Prohibiting misrepresentation of the origin of that material,
|
||||
or requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
- d) Limiting the use for publicity purposes of names of licensors
|
||||
or authors of the material; or
|
||||
- e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
- f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions
|
||||
of it) with contractual assumptions of liability to the recipient,
|
||||
for any liability that these contractual assumptions directly
|
||||
impose on those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions; the
|
||||
above requirements apply either way.
|
||||
|
||||
#### 8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your license
|
||||
from a particular copyright holder is reinstated (a) provisionally,
|
||||
unless and until the copyright holder explicitly and finally
|
||||
terminates your license, and (b) permanently, if the copyright holder
|
||||
fails to notify you of the violation by some reasonable means prior to
|
||||
60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
#### 9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or run
|
||||
a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
#### 10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
#### 11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims owned
|
||||
or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within the
|
||||
scope of its coverage, prohibits the exercise of, or is conditioned on
|
||||
the non-exercise of one or more of the rights that are specifically
|
||||
granted under this License. You may not convey a covered work if you
|
||||
are a party to an arrangement with a third party that is in the
|
||||
business of distributing software, under which you make payment to the
|
||||
third party based on the extent of your activity of conveying the
|
||||
work, and under which the third party grants, to any of the parties
|
||||
who would receive the covered work from you, a discriminatory patent
|
||||
license (a) in connection with copies of the covered work conveyed by
|
||||
you (or copies made from those copies), or (b) primarily for and in
|
||||
connection with specific products or compilations that contain the
|
||||
covered work, unless you entered into that arrangement, or that patent
|
||||
license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
#### 12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under
|
||||
this License and any other pertinent obligations, then as a
|
||||
consequence you may not convey it at all. For example, if you agree to
|
||||
terms that obligate you to collect a royalty for further conveying
|
||||
from those to whom you convey the Program, the only way you could
|
||||
satisfy both those terms and this License would be to refrain entirely
|
||||
from conveying the Program.
|
||||
|
||||
#### 13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
#### 14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in
|
||||
detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies that a certain numbered version of the GNU General Public
|
||||
License "or any later version" applies to it, you have the option of
|
||||
following the terms and conditions either of that numbered version or
|
||||
of any later version published by the Free Software Foundation. If the
|
||||
Program does not specify a version number of the GNU General Public
|
||||
License, you may choose any version ever published by the Free
|
||||
Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future versions
|
||||
of the GNU General Public License can be used, that proxy's public
|
||||
statement of acceptance of a version permanently authorizes you to
|
||||
choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
#### 15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
|
||||
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
|
||||
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
|
||||
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
|
||||
CORRECTION.
|
||||
|
||||
#### 16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
|
||||
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
|
||||
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
|
||||
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
|
||||
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
|
||||
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
|
||||
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
#### 17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
### How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these
|
||||
terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to
|
||||
attach them to the start of each source file to most effectively state
|
||||
the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper
|
||||
mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands \`show w' and \`show c' should show the
|
||||
appropriate parts of the General Public License. Of course, your
|
||||
program's commands might be different; for a GUI interface, you would
|
||||
use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. For more information on this, and how to apply and follow
|
||||
the GNU GPL, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your
|
||||
program into proprietary programs. If your program is a subroutine
|
||||
library, you may consider it more useful to permit linking proprietary
|
||||
applications with the library. If this is what you want to do, use the
|
||||
GNU Lesser General Public License instead of this License. But first,
|
||||
please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
|
|
@ -0,0 +1,52 @@
|
|||
all:
|
||||
cd commande
|
||||
make
|
||||
cd ..
|
||||
|
||||
cd programs
|
||||
make
|
||||
cd ..
|
||||
|
||||
cd noyau
|
||||
make
|
||||
cd ..
|
||||
|
||||
cd contribs
|
||||
make
|
||||
cd ..
|
||||
|
||||
cd install
|
||||
make
|
||||
cd ..
|
||||
|
||||
copy:
|
||||
make all
|
||||
copy commande\*.exe ..\data
|
||||
copy programs\*.exe ..\data
|
||||
copy programs\*.rip ..\data
|
||||
copy noyau\*.sys ..\data
|
||||
rem copy noyau\*.bin ..\data
|
||||
copy contribs\*.exe ..\data
|
||||
copy install\*.com ..\
|
||||
make clean
|
||||
|
||||
clean:
|
||||
cd commande
|
||||
make clean
|
||||
cd ..
|
||||
|
||||
cd programs
|
||||
make clean
|
||||
cd ..
|
||||
|
||||
cd noyau
|
||||
make clean
|
||||
cd ..
|
||||
|
||||
cd contribs
|
||||
make clean
|
||||
cd ..
|
||||
|
||||
cd install
|
||||
make clean
|
||||
cd ..
|
|
@ -0,0 +1,51 @@
|
|||
![logo](https://github.com/dahut87/cos2000v1/raw/master/Graphisme/logo.png)
|
||||
|
||||
## Présentation du projet
|
||||
|
||||
### Qu'est ce que COS2000 ?
|
||||
|
||||
COS2000 est un système d'exploitation minimaliste qui vise essentiellement un objectif pédagogique.
|
||||
Il s'agit avant tout du travail d'un passionné de programmation système.
|
||||
|
||||
Le système est développé intégralement en langage assembleur X86. Le "real mode" et "flat unreal mode" sont les modes de fonctionnement du microprocesseur lors de l'execution de COS2000 (comme MsDOS).
|
||||
|
||||
#### Qu'est ce qu'un système d'exploitation ?
|
||||
|
||||
Il s'agit du logiciel principal qui anime votre ordinateur. Il a pour fonctions principales :
|
||||
|
||||
* Piloter des périphériques tels que souris, clavier, écran, imprimante...etc;
|
||||
* Gérer des fichiers qui sont produit et exploités par des applications;
|
||||
* Coordonner l'accès aux ressources par plusieurs utilisateurs;
|
||||
* Détection et récupération des dysfonctionnements;
|
||||
* Surveiller les performances et assurer une gestion optimale des ressources systèmes.
|
||||
|
||||
Sans système d'exploitation votre ordinateur est inopérant: c'est une boite vide !
|
||||
|
||||
#### Comment utiliser COS2000 ?
|
||||
|
||||
COS2000 n'a pas pour but d'être utilisé en production. Il s'agit d'un système en cours de
|
||||
développement que vous pouvez néanmoins tester sur un ordinateur physique ou de préférence sur une machine virtuelle.
|
||||
Il est nécessaire de compiler le système avant de démarrer celui-ci à partir d'un périphérique amovible (clé usb).
|
||||
|
||||
#### Sur quel ordinateur fonctionne t'il ?
|
||||
|
||||
COS2000 est compatible avec tout ordinateur compatible PC comprenant un processeur compatible 80x86.
|
||||
|
||||
#### Ai-je le droit de le copier, de le modifier, de le réutiliser, de le vendre ?
|
||||
|
||||
COS2000 est sous licence GPL v3.0, en simplifiant un peu :
|
||||
|
||||
* COPIER - OUI
|
||||
* MODIFIER - OUI
|
||||
* REUTILISER - OUI en citant l'auteur
|
||||
* VENDRE - NON
|
||||
|
||||
![logo](https://www.gnu.org/graphics/gplv3-127x51.png)
|
||||
|
||||
Les détails se trouvent dans le fichier `LICENSE.md`
|
||||
|
||||
> “La connaissance s'acquiert par l'expérience,
|
||||
> tout le reste n'est que de l'information..
|
||||
>
|
||||
> ― Albert Einstein
|
||||
> ― Mathématicien, Physicien
|
|
@ -0,0 +1,12 @@
|
|||
![logo](https://github.com/dahut87/cos2000v1/raw/master/Graphisme/logo.png)
|
||||
|
||||
## Copies d'écran de COS2000
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/chargement.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/dir.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/editeur.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/gestionnaire.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/installation.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/interpreteur.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/logo.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/pci.jpg)
|
||||
![screen](https://github.com/dahut87/cos2000v1/raw/develop/Graphisme/screenshots/video.jpg)
|
|
@ -0,0 +1,17 @@
|
|||
lnk_boot = tlink /x
|
||||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
|
||||
all: commande.exe
|
||||
|
||||
commande.exe: commande.asm str0.asm
|
||||
$(asm) commande
|
||||
$(lnk) commande
|
||||
ren commande.com commande.exe
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.com
|
||||
del *.sys
|
||||
del *.err
|
|
@ -0,0 +1,449 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
include ..\include\fat.h
|
||||
|
||||
start:
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
pop ds
|
||||
pop es
|
||||
pop fs
|
||||
pop gs
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
mov ah,3
|
||||
int 48h
|
||||
mov ax,0002
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,42
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset msg
|
||||
int 47h
|
||||
xor bp,bp
|
||||
mov dl,' '
|
||||
call setdelimiter0
|
||||
replay:
|
||||
mov ah,6
|
||||
int 47h
|
||||
noret:
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,16
|
||||
mov di,offset dir
|
||||
int 48h
|
||||
mov si,di
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov si,offset prompt
|
||||
int 47h
|
||||
mov di,offset buffer
|
||||
waitchar:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp ah,59
|
||||
jne norr
|
||||
cmp bp,0
|
||||
je waitchar
|
||||
mov ah,13
|
||||
mov si,cs:[bp-8]
|
||||
int 47h
|
||||
push cs
|
||||
pop es
|
||||
call copy0
|
||||
call getlength0
|
||||
add di,cx
|
||||
jmp waitchar
|
||||
norr:
|
||||
cmp al,0Dh
|
||||
je entere
|
||||
cmp di,offset buffer+256
|
||||
je waitchar
|
||||
mov [di],al
|
||||
inc di
|
||||
mov dl,al
|
||||
mov ah,7
|
||||
int 47h
|
||||
jmp waitchar
|
||||
entere:
|
||||
mov byte ptr [di],0
|
||||
mov si,offset buffer
|
||||
cmp si,di
|
||||
je noret
|
||||
mov ah,6
|
||||
int 47h
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset buffer2
|
||||
xor cx,cx
|
||||
call getitem0
|
||||
mov si,di
|
||||
call uppercase0
|
||||
mov bx,offset commands
|
||||
xor bp,bp
|
||||
tre:
|
||||
mov di,[bx]
|
||||
add bx,8
|
||||
cmp di,0
|
||||
je error
|
||||
push cs
|
||||
pop es
|
||||
call evalue0
|
||||
cmp dx,bp
|
||||
jb noadd
|
||||
mov bp,dx
|
||||
mov ax,bx
|
||||
noadd:
|
||||
call cmpstr0
|
||||
jne tre
|
||||
mov si,offset buffer
|
||||
mov di,offset buffer2
|
||||
call copy0
|
||||
mov si,di
|
||||
call uppercase0
|
||||
xor cx,cx
|
||||
inc cx
|
||||
call getpointeritem0
|
||||
cmp byte ptr [di-1],0
|
||||
jne nopod
|
||||
mov byte ptr [di],0
|
||||
nopod:
|
||||
mov si,di
|
||||
mov di,[bx-4]
|
||||
call checksyntax0
|
||||
jc errorprec
|
||||
mov bx,[bx-6]
|
||||
call bx
|
||||
jmp replay
|
||||
error:
|
||||
mov bp,ax
|
||||
push cs
|
||||
pop es
|
||||
mov dl,'.'
|
||||
call searchchar0
|
||||
je noaddext
|
||||
mov di,offset buffer
|
||||
mov si,offset extcom
|
||||
call concat0
|
||||
noaddext:
|
||||
mov si,offset buffer
|
||||
push cs
|
||||
mov ax,offset arrive
|
||||
push ax
|
||||
mov di,offset vga
|
||||
mov ah,40
|
||||
int 47h
|
||||
mov ax,9000h
|
||||
mov es,ax
|
||||
push ax
|
||||
mov di,0100h
|
||||
push di
|
||||
mov ah,4
|
||||
int 48h
|
||||
jc reallyerror
|
||||
push es
|
||||
push es
|
||||
push es
|
||||
pop ds
|
||||
pop fs
|
||||
pop gs
|
||||
push 7202h
|
||||
popf
|
||||
db 0CBh
|
||||
arrive:
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
pop ds
|
||||
pop es
|
||||
pop fs
|
||||
pop gs
|
||||
mov si,offset vga
|
||||
mov ah,41
|
||||
int 47h
|
||||
xor bp,bp
|
||||
jmp replay
|
||||
reallyerror:
|
||||
pop ax
|
||||
pop ax
|
||||
pop ax
|
||||
pop ax
|
||||
mov ah,13
|
||||
mov si,offset Error_Syntax
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,cs:[bp-8]
|
||||
int 47h
|
||||
jmp replay
|
||||
errorprec:
|
||||
mov ah,13
|
||||
mov si,offset derror
|
||||
int 47h
|
||||
jmp replay
|
||||
|
||||
Code_Exit:
|
||||
pop ax
|
||||
db 0CBh
|
||||
|
||||
Code_Version:
|
||||
mov ah,13
|
||||
mov si,offset Version_Text
|
||||
int 47h
|
||||
ret
|
||||
|
||||
Version_Text db 'Cos 2000 version 3.0.2Fr par Nico',0
|
||||
|
||||
Code_Cls:
|
||||
mov ah,2
|
||||
int 47h
|
||||
ret
|
||||
|
||||
Code_Reboot:
|
||||
push 0FFFFh
|
||||
push 00000h
|
||||
db 0CBH
|
||||
|
||||
Code_Command:
|
||||
mov bx,offset commands
|
||||
showalls:
|
||||
mov si,[bx]
|
||||
add bx,8
|
||||
cmp si,0
|
||||
je endoff
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
jmp showalls
|
||||
endoff:
|
||||
ret
|
||||
|
||||
Code_Mode:
|
||||
mov cx,0
|
||||
call gettypeditem0
|
||||
mov ah,0
|
||||
mov al,dl
|
||||
and al,1111b
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
ret
|
||||
|
||||
present db 'Le volume insere est nomme ',0
|
||||
present2 db ', Numero de serie : ',0
|
||||
nomdisque db 13 dup (0)
|
||||
Code_Dir:
|
||||
mov si,offset present
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,11
|
||||
mov di,offset nomdisque
|
||||
int 48h
|
||||
mov si,di
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov si,offset present2
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,12
|
||||
int 48h
|
||||
mov ah,10
|
||||
mov cx,32
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
xor ebp,ebp
|
||||
mov di,offset bufferentry
|
||||
mov si,di
|
||||
mov ah,7
|
||||
int 48h
|
||||
jc nofiles
|
||||
go:
|
||||
mov ah,46
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,44
|
||||
mov dx,[si+Entries.FileDateCrea]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,45
|
||||
mov dx,[si+Entries.FileTimeCrea]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,44
|
||||
mov dx,[si+Entries.FileDate]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,45
|
||||
mov dx,[si+Entries.FileTime]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,48
|
||||
mov edx,[si+Entries.FileSize]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,47
|
||||
mov dl,[si+Entries.FileAttr]
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
inc bp
|
||||
mov ah,8
|
||||
int 48h
|
||||
jnc go
|
||||
nofiles:
|
||||
mov edx,ebp
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,8
|
||||
int 47h
|
||||
mov si,offset filess
|
||||
mov ah,13
|
||||
int 47h
|
||||
ret
|
||||
bufferentry db 32 dup (0)
|
||||
filess db ' Fichier(s) au total',0
|
||||
|
||||
changing db 'Changement de repertoire vers ',0
|
||||
code_cd:
|
||||
mov cx,0
|
||||
call gettypeditem0
|
||||
push si
|
||||
mov si,offset changing
|
||||
mov ah,13
|
||||
int 47h
|
||||
pop si
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov si,di
|
||||
mov ah,13
|
||||
int 48h
|
||||
jnc okchange
|
||||
mov si,offset errorchanging
|
||||
mov ah,13
|
||||
int 47h
|
||||
okchange:
|
||||
ret
|
||||
errorchanging db 'Impossible d''atteindre ce dossier',0
|
||||
|
||||
code_refresh:
|
||||
mov ah,3
|
||||
int 48h
|
||||
jnc okrefresh
|
||||
mov si,offset errorrefreshing
|
||||
mov ah,13
|
||||
int 47h
|
||||
ret
|
||||
okrefresh:
|
||||
mov si,offset present
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,11
|
||||
mov di,offset nomdisque
|
||||
int 48h
|
||||
mov si,di
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov si,offset present2
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,12
|
||||
int 48h
|
||||
mov ah,10
|
||||
mov cx,32
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
ret
|
||||
errorrefreshing db 'Impossible de lire le support',0
|
||||
|
||||
extcom db '.EXE',0
|
||||
|
||||
commands dw Str_Exit ,Code_Exit ,Syn_Exit ,Help_Exit
|
||||
dw Str_Version,Code_Version,Syn_Version,Help_Version
|
||||
dw Str_Cls ,Code_Cls ,Syn_Cls ,Help_Cls
|
||||
dw Str_Reboot ,Code_Reboot ,Syn_Reboot ,Help_Reboot
|
||||
dw Str_Command,Code_Command,Syn_Command,Help_Command
|
||||
dw Str_Mode ,Code_Mode ,Syn_Mode ,Help_Mode
|
||||
dw Str_Dir ,Code_Dir ,Syn_Dir ,Help_Dir
|
||||
dw Str_refresh ,Code_refresh ,Syn_refresh ,Help_refresh
|
||||
dw Str_cd ,Code_cd ,Syn_cd ,Help_cd
|
||||
dw 0
|
||||
|
||||
Str_Exit db 'QUIT',0
|
||||
Str_Version db 'VERS',0
|
||||
Str_Cls db 'EFFAC',0
|
||||
Str_Reboot db 'REDEM',0
|
||||
Str_Command db 'CMDS',0
|
||||
Str_Mode db 'MODE',0
|
||||
Str_Dir db 'VOIR',0
|
||||
Str_refresh db 'LIRE',0
|
||||
Str_cd db 'CH',0
|
||||
Syn_Exit db 0
|
||||
Syn_Version db 0
|
||||
Syn_Cls db 0
|
||||
Syn_Reboot db 0
|
||||
Syn_Command db 0
|
||||
Syn_Mode db 'FFH',0
|
||||
Syn_Dir db 0
|
||||
Syn_refresh db 0
|
||||
Syn_cd db '@',0
|
||||
Help_Exit db 0
|
||||
Help_Version db 0
|
||||
Help_Cls db 0
|
||||
Help_Reboot db 0
|
||||
Help_Command db 0
|
||||
Help_Mode db 0
|
||||
Help_Dir db 0
|
||||
Help_refresh db 0
|
||||
Help_cd db 0
|
||||
derror db 'Erreur de Syntaxe !',0
|
||||
Error_Syntax db 'La commande ou l''executable n''existe pas ! F1 pour ',0
|
||||
prompt db '>',0
|
||||
msg db 'Interpreteur de commande COS V1.1',0
|
||||
|
||||
include str0.asm
|
||||
|
||||
dir equ $
|
||||
buffer equ $+128
|
||||
buffer2 equ $+128+512
|
||||
vga equ $+128+512+512
|
||||
|
||||
|
||||
end start
|
|
@ -0,0 +1,857 @@
|
|||
;Librairie qui prend en charge le format de STR ASCIIZ
|
||||
;# nombre 8
|
||||
;@ str 7
|
||||
;& nom 6
|
||||
|
||||
;High Low
|
||||
;0 variable 4 hex
|
||||
;1 byte 3 dec
|
||||
;2 word 2 oct
|
||||
;3 3 octets 1 bin
|
||||
;4 dword 5 adresse
|
||||
;5 5 octets 6 nom
|
||||
;6 ... 7 str
|
||||
; 8 nombre
|
||||
|
||||
|
||||
;Renvoie carry si la syntaxe de ds:si n'est pas respect‚ par rapport a es:di
|
||||
CheckSyntax0:
|
||||
push ax bx dx bp si di ds es
|
||||
push es di
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset temp2
|
||||
call copy0
|
||||
mov si,di
|
||||
push cs
|
||||
pop ds
|
||||
pop di es
|
||||
call getdelimiter0
|
||||
mov bp,dx
|
||||
mov dl,' '
|
||||
call setdelimiter0
|
||||
call compressdelimiter0
|
||||
call uppercase0
|
||||
call getnbitems0
|
||||
;call xch
|
||||
;mov ax,cx
|
||||
;call getnbitem0
|
||||
;call xch
|
||||
;cmp ax,cx
|
||||
;call xch
|
||||
;jne notequalatall
|
||||
mov bx,cx
|
||||
xor cx,cx
|
||||
itemer:
|
||||
call whatisitem0
|
||||
mov dx,ax
|
||||
call xch
|
||||
call whatisitem0
|
||||
call xch
|
||||
cmp ax,dx
|
||||
jne prob
|
||||
cmp al,6
|
||||
jb equal
|
||||
call cmpitems0
|
||||
je equal
|
||||
prob:
|
||||
cmp dl,4
|
||||
ja nosize
|
||||
cmp al,8
|
||||
je equal
|
||||
cmp al,4
|
||||
jne notequalatall
|
||||
cmp dh,ah
|
||||
ja notequalatall
|
||||
jmp equal
|
||||
nosize:
|
||||
cmp al,7
|
||||
jne noname
|
||||
cmp ah,0
|
||||
jne notequalatall
|
||||
jmp equal
|
||||
noname:
|
||||
cmp al,8
|
||||
je equal
|
||||
jmp notequalatall
|
||||
equal:
|
||||
inc cx
|
||||
cmp cx,bx
|
||||
jne itemer
|
||||
cld
|
||||
ackno:
|
||||
mov dx,bp
|
||||
call setdelimiter0
|
||||
pop es ds di si bp dx bx ax
|
||||
ret
|
||||
notequalatall:
|
||||
stc
|
||||
jmp ackno
|
||||
xch:
|
||||
push ds
|
||||
push es
|
||||
pop ds
|
||||
pop es
|
||||
xchg si,di
|
||||
ret
|
||||
|
||||
temp2 db 256 dup (0)
|
||||
|
||||
;Compare les ‚l‚ments cx de deux chaine ds:si et es:di
|
||||
Cmpitems0:
|
||||
push cx dx si di
|
||||
push cx di
|
||||
call getpointeritem0
|
||||
mov si,di
|
||||
xor cx,cx
|
||||
inc cx
|
||||
call getpointeritem0
|
||||
mov dx,di
|
||||
sub dx,si
|
||||
dec cx
|
||||
pop di cx
|
||||
push ds si
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
call getpointeritem0
|
||||
pop si ds
|
||||
mov cx,dx
|
||||
rep cmpsb
|
||||
pop di si dx cx
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;Renvoie l'‚l‚ment cx de ds:si dans edx si nb et dans es:di si str ou name
|
||||
gettypeditem0:
|
||||
push bx cx si
|
||||
call getpointeritem0
|
||||
mov si,di
|
||||
xor cx,cx
|
||||
inc cl
|
||||
call getpointeritem0
|
||||
mov bx,di
|
||||
dec bx
|
||||
mov cl,0
|
||||
xchg cl,ds:[bx]
|
||||
call gettyped0
|
||||
xchg cl,ds:[bx]
|
||||
pop si cx bx
|
||||
ret
|
||||
|
||||
;Renvoie ds:si dans edx si nb et dans es:di si str ou name
|
||||
gettyped0:
|
||||
push ax
|
||||
call whatis0
|
||||
cmp al,5
|
||||
jb number
|
||||
cmp al,6
|
||||
je pointer
|
||||
push ds
|
||||
pop es
|
||||
call getpointeritem0
|
||||
jmp endofGettypeditem0
|
||||
number:
|
||||
mov edx,cs:lastnumber
|
||||
jmp endofgettypeditem0
|
||||
pointer:
|
||||
call str0toadress
|
||||
endofgettypeditem0:
|
||||
pop ax
|
||||
ret
|
||||
|
||||
;Renvoie dans ax le type de la str0 point‚e par ds:si ‚l‚ment cx
|
||||
whatisitem0:
|
||||
push bx cx si di
|
||||
call getpointeritem0
|
||||
mov si,di
|
||||
xor cx,cx
|
||||
inc cl
|
||||
call getpointeritem0
|
||||
mov bx,di
|
||||
dec bx
|
||||
mov cl,0
|
||||
xchg cl,ds:[bx]
|
||||
call whatis0
|
||||
xchg cl,ds:[bx]
|
||||
pop di si cx bx
|
||||
ret
|
||||
|
||||
;Renvoie dans ax le type de la str0 point‚e par ds:si
|
||||
;High Low
|
||||
;0 variable 4 hex
|
||||
;1 byte 3 dec
|
||||
;2 word 2 oct
|
||||
;3 3 octets 1 bin
|
||||
;4 dword 5 adresse
|
||||
;5 5 octets 6 name
|
||||
;6 ... 7 str
|
||||
whatis0:
|
||||
push bx cx edx
|
||||
mov cl,2
|
||||
call str0isbase
|
||||
jnc finbase
|
||||
mov cl,8
|
||||
call str0isbase
|
||||
jnc finbase
|
||||
mov cl,10
|
||||
call str0isbase
|
||||
jnc finbase
|
||||
mov cl,16
|
||||
call str0isbase
|
||||
jc testadress
|
||||
finbase:
|
||||
mov bx,cx
|
||||
xor ch,ch
|
||||
mov al,cs:[bx+offset basenn-2]
|
||||
call str0toint
|
||||
mov cs:Lastnumber,edx
|
||||
cmp edx,0000FFFFh
|
||||
ja bits32
|
||||
cmp dx,00FFh
|
||||
ja bits16
|
||||
mov ah,1
|
||||
jmp endofwhat
|
||||
bits16:
|
||||
mov ah,2
|
||||
jmp endofwhat
|
||||
bits32:
|
||||
mov ah,3
|
||||
jmp endofwhat
|
||||
testadress:
|
||||
call str0isadress
|
||||
jc testname
|
||||
mov ax,0005h
|
||||
jmp endofwhat
|
||||
testname:
|
||||
;call str0isname
|
||||
;jc testvarstr
|
||||
;jnc isok
|
||||
;mov al,06h
|
||||
cmp byte ptr [si],'&'
|
||||
jne testvarstr
|
||||
mov al,06h
|
||||
call getlength0
|
||||
dec cl
|
||||
mov ah,cl
|
||||
jmp endofwhat
|
||||
testvarstr:
|
||||
cmp byte ptr [si],'@'
|
||||
jne testnumber
|
||||
mov al,07h
|
||||
call getlength0
|
||||
dec cl
|
||||
mov ah,cl
|
||||
jmp endofwhat
|
||||
testnumber:
|
||||
cmp byte ptr [si],'#'
|
||||
jne isstr
|
||||
mov al,8
|
||||
call getlength0
|
||||
dec cl
|
||||
mov ah,cl
|
||||
jmp endofwhat
|
||||
isstr:
|
||||
mov al,07h
|
||||
call getlength0
|
||||
mov ah,cl
|
||||
endofwhat:
|
||||
pop edx cx bx
|
||||
ret
|
||||
|
||||
Lastnumber dd 0
|
||||
|
||||
;Renvoie non carry si la str ds:si point‚e peut ˆtre une adresse
|
||||
str0isadress:
|
||||
;push
|
||||
stc
|
||||
;pop
|
||||
ret
|
||||
|
||||
;Renvoie en es:di le pointeur str0 ds:si
|
||||
Str0toAdress:
|
||||
;push
|
||||
stc
|
||||
;pop
|
||||
ret
|
||||
|
||||
;Renvoie non carry si la str ds:si point‚e peut ˆtre un nom de fichier
|
||||
str0isname:
|
||||
push ax si di
|
||||
isname:
|
||||
mov al,[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je itsok
|
||||
mov di,offset non
|
||||
verify:
|
||||
mov ah,[di]
|
||||
inc di
|
||||
cmp ah,0FFh
|
||||
je isname
|
||||
cmp ah,al
|
||||
jne verify
|
||||
stc
|
||||
jmp itsdead
|
||||
itsok:
|
||||
clc
|
||||
itsdead:
|
||||
pop di si ax
|
||||
ret
|
||||
|
||||
non db '/<>|"?*:\',01,0FFh
|
||||
|
||||
;Renvoie non carry si le texte point‚ par si est de la base cl
|
||||
str0isbase:
|
||||
push ax cx si di es
|
||||
push cs
|
||||
pop es
|
||||
mov ah,cl
|
||||
isstrbase:
|
||||
mov al,[si]
|
||||
cmp al,0
|
||||
je okbase
|
||||
mov cl,ah
|
||||
xor ch,ch
|
||||
mov di,cx
|
||||
cmp al,es:[di-2+offset basen]
|
||||
je verifbase
|
||||
xor ch,ch
|
||||
inc cl
|
||||
mov di,offset base
|
||||
cld
|
||||
repne scasb
|
||||
cmp cx,0
|
||||
je nobase
|
||||
inc si
|
||||
jmp isstrbase
|
||||
okbase:
|
||||
clc
|
||||
endbase:
|
||||
pop es di si cx ax
|
||||
ret
|
||||
verifbase:
|
||||
cmp byte ptr [si+1],0
|
||||
je okbase
|
||||
nobase:
|
||||
stc
|
||||
jmp endbase
|
||||
|
||||
temp dw 0
|
||||
|
||||
;Converti un str de base cl en int dans edx
|
||||
str0toint:
|
||||
push eax bx ecx si edi ebp es
|
||||
push cs
|
||||
pop es
|
||||
mov ah,cl
|
||||
mov cs:temp,si
|
||||
gotos:
|
||||
cmp byte ptr [si+1], 0
|
||||
je oklo
|
||||
inc si
|
||||
jmp gotos
|
||||
oklo:
|
||||
mov edi,1
|
||||
xor ebp,ebp
|
||||
mov bl,cl
|
||||
baseto:
|
||||
cmp si,cs:temp
|
||||
jb endbaseto
|
||||
mov al,[si]
|
||||
xor ecx,ecx
|
||||
mov cl,bl
|
||||
inc cl
|
||||
push di
|
||||
mov di,offset base
|
||||
cld
|
||||
repne scasb
|
||||
pop di
|
||||
jne noop
|
||||
sub cl,bl
|
||||
neg cl
|
||||
mov eax,edi
|
||||
mul ecx
|
||||
add ebp,eax
|
||||
mov eax,edi
|
||||
mov cl,bl
|
||||
mul ecx
|
||||
mov edi,eax
|
||||
noop:
|
||||
dec si
|
||||
jmp baseto
|
||||
endbaseto:
|
||||
mov edx,ebp
|
||||
pop es ebp edi si ecx bx eax
|
||||
ret
|
||||
base db '0123456789ABCDEF'
|
||||
basen db 'B O D H'
|
||||
basenn db 1,0,0,0,0,0,2,0,3,0,0,0,0,0,4
|
||||
|
||||
;Renvoie en es:di la partie de cx caractŠres a partir de la gauche de ds:si
|
||||
Left0:
|
||||
push ax cx si di
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;Renvoie en es:di la partie de cx caractŠres a partir de la droite de ds:si
|
||||
Right0:
|
||||
push ax cx dx si di
|
||||
mov dx,cx
|
||||
call getlength0
|
||||
add si,cx
|
||||
sub si,dx
|
||||
mov cx,dx
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si dx cx ax
|
||||
ret
|
||||
|
||||
;Renvoie en es:di la partie de cx caractŠres a partir de la position bx de ds:si
|
||||
middle0:
|
||||
push ax cx si di
|
||||
add si,bx
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;Rempli de cx caractŠres dl a partir de la position bx de ds:si
|
||||
Fill0:
|
||||
push ax bx cx si di es
|
||||
push ds
|
||||
pop es
|
||||
add si,bx
|
||||
mov al,dl
|
||||
mov di,si
|
||||
cld
|
||||
rep stosb
|
||||
pop es di si cx bx ax
|
||||
ret
|
||||
|
||||
;Remplace tout les caractŠres al de ds:si par des caractŠres dl
|
||||
ReplaceAllchar0:
|
||||
push ax cx di es
|
||||
call GetLength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
findandchange:
|
||||
repne scasb
|
||||
cmp cx,0
|
||||
je endofchange
|
||||
mov es:[di-1],dl
|
||||
jmp findandchange
|
||||
endofchange:
|
||||
pop es di cx ax
|
||||
ret
|
||||
|
||||
|
||||
;Recherche un caractŠre dl dans la chaŒne ds:si
|
||||
SearchChar0:
|
||||
push ax cx di es
|
||||
call GetLength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,dl
|
||||
repne scasb
|
||||
pop es di cx ax
|
||||
ret
|
||||
|
||||
;Inverse la chaine point‚e en ds:si
|
||||
invert0:
|
||||
push ax cx si di es
|
||||
call GetLength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
add di,cx
|
||||
dec di
|
||||
revert:
|
||||
mov al,[si]
|
||||
xchg al,es:[di]
|
||||
mov [si],al
|
||||
inc si
|
||||
dec di
|
||||
cmp si,di
|
||||
je finishinvert
|
||||
dec di
|
||||
cmp si,di
|
||||
je finishinvert
|
||||
inc di
|
||||
jmp revert
|
||||
finishinvert:
|
||||
pop es di si cx ax
|
||||
ret
|
||||
|
||||
;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal
|
||||
cmpstr0:
|
||||
push cx dx si di
|
||||
call GetLength0
|
||||
mov dx,cx
|
||||
push ds si
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
call GetLength0
|
||||
pop si ds
|
||||
cmp cx,dx
|
||||
jne NotEqual
|
||||
repe cmpsb
|
||||
NotEqual:
|
||||
pop di si dx cx
|
||||
ret
|
||||
|
||||
;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal et renvoie le nb de caractŠre egaux dans dx
|
||||
evalue0:
|
||||
push cx si di
|
||||
push ds si
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
call GetLength0
|
||||
pop si ds
|
||||
mov dx,cx
|
||||
repe cmpsb
|
||||
pushf
|
||||
sub dx,cx
|
||||
popf
|
||||
pop di si cx
|
||||
ret
|
||||
|
||||
|
||||
;Insert une chaine ds:si en es:di a partir du caractŠre cx
|
||||
insert0:
|
||||
push cx di si
|
||||
add di,cx
|
||||
call getlength0
|
||||
push si di ds
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
add di,cx
|
||||
call copy20
|
||||
pop ds di si
|
||||
cld
|
||||
inc di
|
||||
rep movsb
|
||||
pop si di cx
|
||||
ret
|
||||
|
||||
;Detruit CX caractŠres a partir du caractŠre BX de DS:SI
|
||||
delete0:
|
||||
push cx dx si di es
|
||||
push ds
|
||||
pop es
|
||||
mov dx,cx
|
||||
call getlength0
|
||||
sub cx,dx
|
||||
sub cx,bx
|
||||
inc cx
|
||||
add si,bx
|
||||
mov di,si
|
||||
add si,dx
|
||||
cld
|
||||
rep movsb
|
||||
pop es di si dx cx
|
||||
ret
|
||||
|
||||
;Copie une chaine de ds:si en es:di
|
||||
Copy0:
|
||||
push ax cx si di
|
||||
call GetLength0
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;Copie une chaine de ds:si en es:di
|
||||
Copy20:
|
||||
push ax cx si di
|
||||
call GetLength0
|
||||
cld
|
||||
add si,cx
|
||||
add di,cx
|
||||
inc cx
|
||||
std
|
||||
rep movsb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;ConcatŠne le chaine ds:si avec es:di
|
||||
Concat0:
|
||||
push ax cx dx si di
|
||||
call GetLength0
|
||||
mov dx,cx
|
||||
xchg si,di
|
||||
push ds
|
||||
push es
|
||||
pop ds
|
||||
call GetLength0
|
||||
pop ds
|
||||
xchg si,di
|
||||
add di,cx
|
||||
mov cx,dx
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si dx cx ax
|
||||
ret
|
||||
|
||||
;Met DL comme d‚limiteur par d‚faut
|
||||
SetDelimiter0:
|
||||
mov cs:delim,dl
|
||||
ret
|
||||
|
||||
;Renvoie le d‚limiteur par d‚faut dans dl
|
||||
GetDelimiter0:
|
||||
mov dl,cs:delim
|
||||
ret
|
||||
delim db 0
|
||||
|
||||
;D‚truit les d‚limiteur qui sont cons‚cutifs dans ds:si
|
||||
CompressDelimiter0:
|
||||
push ax dx si di es
|
||||
call Getlength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,cs:delim
|
||||
xor dx,dx
|
||||
Compressitems:
|
||||
repne scasb
|
||||
inc dx
|
||||
againcomp:
|
||||
cmp [di],al
|
||||
jne nosup
|
||||
mov si,di
|
||||
mov bx,0
|
||||
push cx
|
||||
mov cx,1
|
||||
call delete0
|
||||
pop cx
|
||||
jmp againcomp
|
||||
nosup:
|
||||
cmp cx,0
|
||||
jne compressitems
|
||||
mov cx,dx
|
||||
pop es di si dx ax
|
||||
ret
|
||||
|
||||
;Met le nombre d'‚l‚ments … cx
|
||||
Setnbitems0:
|
||||
push ax cx dx di es
|
||||
mov dx,cx
|
||||
call Getnbitems0
|
||||
cmp cx,dx
|
||||
je noadjust
|
||||
ja subsome
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
sub cx,dx
|
||||
neg cx
|
||||
push cx
|
||||
call getlength0
|
||||
add di,cx
|
||||
pop cx
|
||||
mov al,cs:delim
|
||||
mov ah,'a'
|
||||
rep stosw
|
||||
mov al,0
|
||||
stosb
|
||||
jmp noadjust
|
||||
subsome:
|
||||
mov cx,dx
|
||||
call GetPointeritem0
|
||||
dec di
|
||||
mov byte ptr [di],0
|
||||
noadjust:
|
||||
pop es di dx cx
|
||||
ret
|
||||
|
||||
;Renvoie la taille dx de l'‚l‚ment cx
|
||||
Getitemsize:
|
||||
push cx di
|
||||
call getpointeritem0
|
||||
mov dx,di
|
||||
inc cx
|
||||
call getpointeritem0
|
||||
sub dx,di
|
||||
neg dx
|
||||
dec dx
|
||||
pop di cx
|
||||
ret
|
||||
|
||||
;Renvoie en es:di l'‚l‚ment cx de ds:si
|
||||
Getitem0:
|
||||
push si di cx ax
|
||||
push di
|
||||
call getPointeritem0
|
||||
call getitemsize
|
||||
mov si,di
|
||||
pop di
|
||||
mov cx,dx
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop ax cx di si
|
||||
ret
|
||||
|
||||
;renvoi un pointeur di sur l'‚l‚ment cx de ds:si
|
||||
GetPointeritem0:
|
||||
push ax bx cx dx es
|
||||
mov bx,cx
|
||||
call Getlength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,cs:delim
|
||||
xor dx,dx
|
||||
Countnbitems:
|
||||
cmp bx,dx
|
||||
je finishpointer
|
||||
repne scasb
|
||||
inc dx
|
||||
cmp cx,0
|
||||
jne countnbitems
|
||||
inc di
|
||||
finishpointer:
|
||||
pop es dx cx bx ax
|
||||
ret
|
||||
|
||||
;Renvoie le nombre d'‚l‚ments cx de ds:si
|
||||
GetNbitems0:
|
||||
push ax dx di es
|
||||
call Getlength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,cs:delim
|
||||
xor dx,dx
|
||||
Countitems:
|
||||
repne scasb
|
||||
inc dx
|
||||
cmp cx,0
|
||||
jne countitems
|
||||
mov cx,dx
|
||||
pop es di dx ax
|
||||
ret
|
||||
|
||||
;renvoie la taille en octets CX de la chaine point‚e en ds:si
|
||||
GetLength0:
|
||||
push ax di es
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,0
|
||||
mov cx,0FFFFh
|
||||
cld
|
||||
repne scasb
|
||||
neg cx
|
||||
dec cx
|
||||
dec cx
|
||||
pop es di ax
|
||||
ret
|
||||
|
||||
;Met la taille en octets de la chaine point‚e ds:si a CX
|
||||
SetLength0:
|
||||
push bx
|
||||
mov bx,cx
|
||||
mov byte ptr [si+bx],0
|
||||
pop bx
|
||||
ret
|
||||
|
||||
;met en majuscule la chaine ds:si
|
||||
UpperCase0:
|
||||
push si ax
|
||||
UpperCase:
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je EndUpperCase
|
||||
cmp al,'a'
|
||||
jb UpperCase
|
||||
cmp al,'z'
|
||||
ja UpperCase
|
||||
sub byte ptr [si-1],'a'-'A'
|
||||
jmp UpperCase
|
||||
EndUpperCase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
;met en majuscule la premiŠre lettre chaine ds:si
|
||||
OneCase0:
|
||||
push ax
|
||||
OneUpperCase:
|
||||
mov al,ds:[si]
|
||||
cmp al,'a'
|
||||
jb OneEndUpperCase
|
||||
cmp al,'z'
|
||||
ja OneEndUpperCase
|
||||
sub byte ptr [si],'a'-'A'
|
||||
OneEndUpperCase:
|
||||
clc
|
||||
pop ax
|
||||
ret
|
||||
|
||||
;met en minuscule la chaine ds:si
|
||||
LowerCase0:
|
||||
push si ax
|
||||
LowerCase:
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je EndLowerCase
|
||||
cmp al,'A'
|
||||
jb LowerCase
|
||||
cmp al,'Z'
|
||||
ja LowerCase
|
||||
add byte ptr [si-1],'a'-'A'
|
||||
jmp LowerCase
|
||||
EndLowerCase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
;Inverse la casse la chaine ds:si
|
||||
InvertCase0:
|
||||
push si ax
|
||||
InvertCase:
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je EndInvertCase
|
||||
cmp al,'A'
|
||||
jb InvertCase
|
||||
cmp al,'Z'
|
||||
jbe GoInvertCase
|
||||
cmp al,'a'
|
||||
jb InvertCase
|
||||
cmp al,'z'
|
||||
ja InvertCase
|
||||
sub byte ptr [si-1],'a'-'A'
|
||||
jmp InvertCase
|
||||
GoInvertCase:
|
||||
add byte ptr [si-1],'a'-'A'
|
||||
jmp InvertCase
|
||||
EndInvertCase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
start:
|
||||
mov si,offset essai
|
||||
call whatis0
|
||||
|
||||
|
||||
mov si,offset pop1
|
||||
mov di,offset pop2
|
||||
call checksyntax0
|
||||
ret
|
||||
|
||||
essai db '#',0
|
||||
pop1 db 'essai 0FFh',0
|
||||
pop2 db 'ESSAI 012H',0
|
||||
include str0.asm
|
||||
|
||||
|
||||
|
||||
end start
|
|
@ -0,0 +1,20 @@
|
|||
lnk_boot = tlink /x
|
||||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
|
||||
all: ex-tasm.exe ex-nasm.exe
|
||||
|
||||
ex-tasm.exe: ex-tasm.asm
|
||||
$(asm) ex-tasm
|
||||
$(lnk) ex-tasm
|
||||
ren ex-tasm.com ex-tasm.exe
|
||||
|
||||
ex-nasm.exe: ex-nasm.asm
|
||||
nasm ex-nasm.asm -o ex-nasm.exe
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.com
|
||||
del *.sys
|
||||
del *.err
|
|
@ -0,0 +1,14 @@
|
|||
[bits 16] ;16 bits
|
||||
[org 0x0100] ;Point d'entré en 0100h
|
||||
section .text ;Segment de code
|
||||
|
||||
start:
|
||||
mov ah,0x0D
|
||||
mov si,msg
|
||||
int 0x47 ;Afficher le texte (Showstring0)
|
||||
xor ax,ax
|
||||
int 0x16 ;Attendre l'appuie sur une touche
|
||||
retf ;retour far
|
||||
|
||||
msg db 'Hello World',0
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
.model tiny ;model tiny (.com)
|
||||
.486 ;Pour processeur 80486
|
||||
Smart ;Optimisations
|
||||
.code ;Segment de code
|
||||
|
||||
org 0100h ;Point d'entré en 0100h
|
||||
|
||||
start:
|
||||
mov ah,0Dh
|
||||
mov si,offset msg
|
||||
int 47h ;Afficher le texte (Showstring0)
|
||||
xor ax,ax
|
||||
int 16h ;Attendre l'appuie sur une touche
|
||||
db 0CBH ;retour far
|
||||
|
||||
msg db 'Hello World',0
|
||||
|
||||
end start
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
BMP_File struc
|
||||
BMP_FileType db 'BM'
|
||||
BMP_FileSize dd ? ; taille du fichier
|
||||
BMP_Reserved dd 0 ; toujours 0
|
||||
BMP_BitMapOffset dd ? ; offset de l'image
|
||||
BMP_HeaderSize dd ? ; taille de l'entete en octects
|
||||
BMP_Width dd ? ; largeur en pixels de l'image
|
||||
BMP_Height dd ? ; hauteur en pixels de l'image
|
||||
BMP_Planes dw 1 ; nombre de plan utilisés
|
||||
BMP_BitsPerPixel dw ? ; nombre de bits par pixels
|
||||
BMP_Compression dd ? ; méthode de compression
|
||||
BMP_SizeOfBitMap dd ? ; taille de l'image en octects
|
||||
BMP_HorzResolution dd ? ; resolution horizontale en pixels par mètre
|
||||
BMP_VertResolution dd ? ; resolution verticale en pixels par mètre
|
||||
BMP_ColorsUsed dd ? ; nombre de couleur dans la palette si 0: palette entière si BitPerPixel<=8
|
||||
BMP_ColorsImportant dd ? ; nombre de couleurs importantes masques pour les modes de plus de 8 bits par pixels
|
||||
BMP_RedMask dd ?
|
||||
BMP_GreenMask dd ?
|
||||
BMP_BlueMask dd ?
|
||||
BMP_AlphaMask dd ?
|
||||
BMP_ColorSpaceType dd ?
|
||||
BMP_RedX dd ?
|
||||
BMP_RedY dd ?
|
||||
BMP_RedZ dd ?
|
||||
BMP_GreenX dd ?
|
||||
BMP_GreenY dd ?
|
||||
BMP_GreenZ dd ?
|
||||
BMP_BlueX dd ?
|
||||
BMP_BlueY dd ?
|
||||
BMP_BlueZ dd ?
|
||||
BMP_GammaRed dd ?
|
||||
BMP_GammaGreen dd ?
|
||||
BMP_GammeBlue dd ?
|
||||
BMP_file ends
|
||||
|
||||
;BMP_Compression peut prendre les valeurs suivantes:
|
||||
BMP_COMP_UNCOMP equ 0 ; pas de compression
|
||||
BMP_COMP_RLE8 equ 1 ; 8-bit run length encoding
|
||||
BMP_COMP_RLE4 equ 2 ; 4-bit tun length encoding
|
||||
BMP_COMP_BFE equ 3 ; bitfields encoding
|
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1,58 @@
|
|||
Free equ 0
|
||||
True equ 1
|
||||
False equ 0
|
||||
|
||||
DPT struc
|
||||
StepRate&HeadUnload db 0DFh ;Vitesse de progression & mont‚e de la tˆte
|
||||
DMAFlag&HeadLoad db 002h ;Etat Dma et temps de descente de la tˆte
|
||||
DelayMotorOff db 025h ;Temps avant extinction moteur
|
||||
BytePerSector db 002h ;Taille des secteurs
|
||||
SectorPerTracks db 000h ;Nombre de secteur par piste
|
||||
InterSectGapLength db 01Bh ;Taille du GAP3 en lecture/‚criture
|
||||
DataLength db 0FFh ;Longueur du transfert de donn‚es
|
||||
InterSectGapLengthF db 054h ;Taille du GAP3 en formatage
|
||||
FormatByte db 0F6h ;Octet de formatage
|
||||
HeadSettlingTime db 000h ;Temps de repos des tˆtes
|
||||
DelayMotorNormSpeed db 008h ;Temps de mont‚e en vitesse du moteur
|
||||
DPT ends
|
||||
|
||||
Entries Struc
|
||||
FileName db 8 dup (0)
|
||||
FilExt db 3 dup (0)
|
||||
FileAttr db 0
|
||||
FileReserved db 0
|
||||
FileTimeCreaMs db 0 ;(*10 ms)
|
||||
FileTimeCrea dw 0
|
||||
FileDateCrea dw 0
|
||||
FileDateAcc dw 0
|
||||
FileNotused dw 0
|
||||
FileTime dw 0
|
||||
FileDate dw 0
|
||||
FileGroup dw 0
|
||||
FileSize dd 0
|
||||
Entries Ends
|
||||
|
||||
BootSector Struc
|
||||
jumper db 0,0,0
|
||||
Vendor db 'COS2000A' ;Fabricant + n°série Formatage
|
||||
SectorSize dw 512 ;octet/secteur
|
||||
SectorsPerCluster db 1 ;secteur/cluster
|
||||
ReservedSectors dw 1 ;secteur reserv‚
|
||||
FatsPerDrive db 2 ;nb de copie de la FAT
|
||||
DirectorySize dw 224 ;taille rep racine
|
||||
SectorsPerDrive dw 2880 ;nb secteur du volume si < 32 még
|
||||
MédiaDescriptor db 0F0h ;Descripteur de média
|
||||
SectorsPerFat dw 9 ;secteur/FAT
|
||||
SectorsPerTrack dw 18 ;secteur/piste
|
||||
HeadsPerDrive dw 2 ;nb de tˆteb de lecture/écriture
|
||||
HiddenSectorsH dw 0 ;nombre de secteur cach‚s
|
||||
HiddenSectorsL dw 0 ;
|
||||
SectorPerDisk2 dd 0 ;Nombre secteur du volume si > 32 Mo+20h ; the number of sectors
|
||||
BootDrive db 0 ;Lecteur de d‚marrage
|
||||
ReservedForNT db 0 ;NA
|
||||
BootSign db 29h ;boot signature 29h
|
||||
SerialNumber dd 01020304h ;no de serie
|
||||
DriveName db 'COS2000 ' ;nom de volume
|
||||
TypeOffAt db 'FAT16 ' ;FAT
|
||||
bootcode db 453 dup (0)
|
||||
BootSector ends
|
|
@ -0,0 +1,19 @@
|
|||
pci Struc
|
||||
vendor dw 0 ;vendor ID (read-only), FFFFh returned if requested device non-existent
|
||||
device dw 0 ;device ID (read-only)
|
||||
command dw 0 ;command register
|
||||
status dw 0 ;status register
|
||||
revision db 0 ;revision ID
|
||||
interface db 0 ;programming interface
|
||||
subclass db 0 ;sub-class
|
||||
class db 0 ;class code
|
||||
cache db 0 ;cache line size
|
||||
timer db 0 ;latency timer
|
||||
typed db 0 ;header type
|
||||
;bits 6-0: header format
|
||||
;00h other
|
||||
;01h PCI-to-PCI bridge
|
||||
;02h PCI-to-CardBus bridge
|
||||
;bit 7: multi-function device
|
||||
result db 0 ;Built-In Self-Test result
|
||||
pci Ends
|
|
@ -0,0 +1,256 @@
|
|||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 07Eh, 081h, 0A5h, 081h, 081h, 0BDh, 099h, 081h, 07Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 07Eh, 0FFh, 0DBh, 0FFh, 0FFh, 0C3h, 0E7h, 0FFh, 07Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 036h, 07Fh, 07Fh, 07Fh, 07Fh, 03Eh, 01Ch, 008h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 008h, 01Ch, 03Eh, 07Fh, 03Eh, 01Ch, 008h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 018h, 03Ch, 03Ch, 0E7h, 0E7h, 0E7h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 018h, 03Ch, 07Eh, 0FFh, 0FFh, 07Eh, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 018h, 03Ch, 03Ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0E7h, 0C3h, 0C3h, 0E7h, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 03Ch, 066h, 042h, 042h, 066h, 03Ch, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 0FFh, 0FFh, 0FFh, 0FFh, 0C3h, 099h, 0BDh, 0BDh, 099h, 0C3h, 0FFh, 0FFh, 0FFh, 0FFh, 000h, 000h
|
||||
DB 000h, 000h, 00Fh, 007h, 00Dh, 019h, 03Ch, 066h, 066h, 066h, 03Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 03Ch, 066h, 066h, 066h, 03Ch, 018h, 07Eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 03Fh, 033h, 03Fh, 030h, 030h, 030h, 070h, 0F0h, 0E0h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 07Fh, 063h, 07Fh, 063h, 063h, 063h, 067h, 0E7h, 0E6h, 0C0h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 018h, 018h, 0DBh, 03Ch, 0E7h, 03Ch, 0DBh, 018h, 018h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 040h, 060h, 070h, 07Ch, 07Fh, 07Ch, 070h, 060h, 040h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 001h, 003h, 007h, 01Fh, 07Fh, 01Fh, 007h, 003h, 001h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 018h, 03Ch, 07Eh, 018h, 018h, 018h, 07Eh, 03Ch, 018h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 033h, 033h, 033h, 033h, 033h, 033h, 000h, 033h, 033h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 07Fh, 0DBh, 0DBh, 0DBh, 07Bh, 01Bh, 01Bh, 01Bh, 01Bh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Eh, 063h, 030h, 01Ch, 036h, 063h, 063h, 036h, 01Ch, 006h, 063h, 03Eh, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07Fh, 07Fh, 07Fh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 018h, 03Ch, 07Eh, 018h, 018h, 018h, 07Eh, 03Ch, 018h, 07Eh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 018h, 03Ch, 07Eh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 018h, 018h, 018h, 018h, 018h, 018h, 07Eh, 03Ch, 018h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 00Ch, 006h, 07Fh, 006h, 00Ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 018h, 030h, 07Fh, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 060h, 060h, 060h, 07Fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 024h, 066h, 0FFh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 008h, 01Ch, 01Ch, 03Eh, 03Eh, 07Fh, 07Fh, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 07Fh, 07Fh, 03Eh, 03Eh, 01Ch, 01Ch, 008h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 010h, 010h, 010h, 010h, 010h, 010h, 010h, 000h, 000h, 010h, 010h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 024h, 024h, 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 042h, 042h, 042h, 0FFh, 042h, 042h, 042h, 0FFh, 042h, 042h, 042h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 010h, 07Eh, 090h, 090h, 090h, 07Ch, 012h, 012h, 012h, 0FCh, 010h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 061h, 091h, 092h, 064h, 008h, 010h, 026h, 049h, 089h, 086h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 070h, 088h, 088h, 088h, 050h, 060h, 091h, 08Ah, 084h, 04Ah, 031h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 018h, 018h, 010h, 020h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 006h, 018h, 020h, 040h, 040h, 040h, 040h, 040h, 020h, 018h, 006h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 060h, 018h, 004h, 002h, 002h, 002h, 002h, 002h, 004h, 018h, 060h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 010h, 092h, 054h, 038h, 0FEh, 038h, 054h, 092h, 010h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 010h, 010h, 010h, 0FEh, 010h, 010h, 010h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 010h, 020h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 0FEh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 001h, 001h, 002h, 004h, 008h, 010h, 020h, 040h, 080h, 080h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 042h, 083h, 085h, 089h, 091h, 0A1h, 0C1h, 081h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 010h, 030h, 050h, 010h, 010h, 010h, 010h, 010h, 010h, 010h, 07Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 042h, 081h, 001h, 002h, 03Ch, 040h, 080h, 080h, 080h, 0FFh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 042h, 081h, 001h, 002h, 03Ch, 002h, 001h, 081h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 002h, 006h, 00Ah, 012h, 022h, 042h, 082h, 0FFh, 002h, 002h, 002h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 0FFh, 080h, 080h, 080h, 0FCh, 002h, 001h, 001h, 081h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 042h, 081h, 080h, 0BCh, 0C2h, 081h, 081h, 081h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 0FFh, 081h, 001h, 002h, 004h, 008h, 010h, 010h, 010h, 010h, 010h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 042h, 081h, 081h, 042h, 03Ch, 042h, 081h, 081h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 042h, 081h, 081h, 043h, 03Dh, 001h, 001h, 081h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 018h, 018h, 010h, 020h, 000h, 000h
|
||||
DB 000h, 002h, 004h, 008h, 010h, 020h, 040h, 020h, 010h, 008h, 004h, 002h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 0FEh, 000h, 000h, 000h, 0FEh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 040h, 020h, 010h, 008h, 004h, 002h, 004h, 008h, 010h, 020h, 040h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 038h, 044h, 082h, 082h, 004h, 008h, 010h, 010h, 000h, 010h, 010h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 042h, 081h, 099h, 0A5h, 0A5h, 0A5h, 09Eh, 080h, 041h, 03Eh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 018h, 024h, 042h, 081h, 081h, 0FFh, 081h, 081h, 081h, 081h, 081h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 0FCh, 042h, 041h, 041h, 042h, 07Ch, 042h, 041h, 041h, 042h, 0FCh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 042h, 081h, 081h, 080h, 080h, 080h, 080h, 081h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 0FCh, 042h, 041h, 041h, 041h, 041h, 041h, 041h, 041h, 042h, 0FCh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 0FFh, 080h, 080h, 080h, 080h, 0FCh, 080h, 080h, 080h, 080h, 0FFh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 0FFh, 080h, 080h, 080h, 080h, 0FCh, 080h, 080h, 080h, 080h, 080h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 042h, 081h, 081h, 080h, 09Fh, 081h, 081h, 081h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 081h, 081h, 081h, 081h, 081h, 0FFh, 081h, 081h, 081h, 081h, 081h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 038h, 010h, 010h, 010h, 010h, 010h, 010h, 010h, 010h, 010h, 038h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 007h, 002h, 002h, 002h, 002h, 002h, 002h, 082h, 082h, 044h, 038h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 081h, 082h, 084h, 088h, 090h, 0E0h, 090h, 088h, 084h, 082h, 081h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 080h, 080h, 080h, 080h, 080h, 080h, 080h, 080h, 080h, 080h, 0FFh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 081h, 0C3h, 0A5h, 099h, 099h, 081h, 081h, 081h, 081h, 081h, 081h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 081h, 0C1h, 0A1h, 091h, 089h, 085h, 083h, 081h, 081h, 081h, 081h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 042h, 081h, 081h, 081h, 081h, 081h, 081h, 081h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 0FCh, 082h, 081h, 081h, 082h, 0FCh, 080h, 080h, 080h, 080h, 080h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 042h, 081h, 081h, 081h, 081h, 081h, 089h, 085h, 042h, 03Dh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 0FCh, 082h, 081h, 081h, 082h, 0FCh, 090h, 088h, 084h, 082h, 081h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 042h, 081h, 080h, 040h, 03Ch, 002h, 001h, 081h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 0FEh, 092h, 010h, 010h, 010h, 010h, 010h, 010h, 010h, 010h, 010h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 081h, 081h, 081h, 081h, 081h, 081h, 081h, 081h, 081h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 081h, 081h, 081h, 081h, 081h, 042h, 042h, 024h, 024h, 018h, 018h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 081h, 081h, 081h, 081h, 081h, 081h, 099h, 099h, 0A5h, 0A5h, 042h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 081h, 081h, 081h, 042h, 024h, 018h, 024h, 042h, 081h, 081h, 081h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 082h, 082h, 082h, 082h, 044h, 028h, 010h, 010h, 010h, 010h, 010h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 0FFh, 001h, 001h, 002h, 004h, 018h, 020h, 040h, 080h, 080h, 0FFh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 07Eh, 040h, 040h, 040h, 040h, 040h, 040h, 040h, 040h, 040h, 07Eh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 080h, 080h, 040h, 020h, 010h, 008h, 004h, 002h, 001h, 001h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 07Eh, 002h, 002h, 002h, 002h, 002h, 002h, 002h, 002h, 002h, 07Eh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 018h, 024h, 042h, 081h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 000h, 000h, 000h
|
||||
DB 000h, 008h, 004h, 002h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 07Ch, 002h, 002h, 07Eh, 082h, 082h, 07Dh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 080h, 080h, 080h, 080h, 0BCh, 0C2h, 081h, 081h, 081h, 0C2h, 0BCh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 03Ch, 042h, 080h, 080h, 080h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 001h, 001h, 001h, 001h, 03Dh, 043h, 081h, 081h, 081h, 043h, 03Dh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 03Ch, 042h, 081h, 0FFh, 080h, 040h, 03Eh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 00Eh, 011h, 010h, 010h, 0FEh, 010h, 010h, 010h, 010h, 010h, 010h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 03Dh, 043h, 081h, 081h, 043h, 03Dh, 001h, 002h, 07Ch, 000h, 000h
|
||||
DB 000h, 080h, 080h, 080h, 080h, 0BCh, 0C2h, 081h, 081h, 081h, 081h, 081h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 008h, 008h, 000h, 038h, 008h, 008h, 008h, 008h, 008h, 03Eh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 002h, 002h, 000h, 006h, 002h, 002h, 002h, 002h, 002h, 082h, 044h, 038h, 000h, 000h
|
||||
DB 000h, 080h, 080h, 080h, 080h, 082h, 084h, 088h, 090h, 0A8h, 0C4h, 082h, 000h, 000h, 000h, 000h
|
||||
DB 038h, 008h, 008h, 008h, 008h, 008h, 008h, 008h, 008h, 008h, 008h, 03Eh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 0ECh, 092h, 092h, 092h, 092h, 092h, 092h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 0B8h, 0C4h, 082h, 082h, 082h, 082h, 082h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 03Ch, 042h, 081h, 081h, 081h, 042h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 0BCh, 0C2h, 081h, 081h, 081h, 0C2h, 0BCh, 080h, 080h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 03Dh, 043h, 081h, 081h, 081h, 043h, 03Dh, 001h, 001h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 0BEh, 0C1h, 080h, 080h, 080h, 080h, 080h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 07Eh, 081h, 080h, 07Eh, 001h, 081h, 07Eh, 000h, 000h, 000h, 000h
|
||||
DB 010h, 010h, 010h, 010h, 010h, 0FEh, 010h, 010h, 010h, 010h, 011h, 00Eh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 081h, 081h, 081h, 081h, 081h, 043h, 03Dh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 081h, 081h, 081h, 081h, 042h, 024h, 018h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 082h, 082h, 092h, 092h, 092h, 0AAh, 044h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 081h, 042h, 024h, 018h, 024h, 042h, 081h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 081h, 081h, 081h, 081h, 043h, 03Dh, 001h, 002h, 07Ch, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 0FFh, 002h, 004h, 018h, 020h, 040h, 0FFh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 004h, 008h, 010h, 010h, 010h, 020h, 010h, 010h, 010h, 008h, 004h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 010h, 010h, 010h, 010h, 000h, 000h, 010h, 010h, 010h, 010h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 040h, 020h, 010h, 010h, 010h, 008h, 010h, 010h, 010h, 020h, 040h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 070h, 099h, 00Eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 008h, 01Ch, 036h, 063h, 063h, 07Fh, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 01Eh, 033h, 061h, 060h, 060h, 061h, 033h, 01Eh, 006h, 003h, 03Eh, 000h, 000h, 000h
|
||||
DB 000h, 000h, 066h, 066h, 000h, 066h, 066h, 066h, 066h, 066h, 03Bh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 006h, 00Ch, 018h, 000h, 03Eh, 063h, 07Fh, 060h, 063h, 03Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 008h, 01Ch, 036h, 000h, 03Ch, 006h, 03Eh, 066h, 066h, 03Bh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 066h, 066h, 000h, 03Ch, 006h, 03Eh, 066h, 066h, 03Bh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 030h, 018h, 00Ch, 000h, 03Ch, 006h, 03Eh, 066h, 066h, 03Bh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 01Ch, 036h, 01Ch, 000h, 03Ch, 006h, 03Eh, 066h, 066h, 03Bh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 03Ch, 066h, 060h, 066h, 03Ch, 00Ch, 006h, 03Ch, 000h, 000h, 000h, 000h
|
||||
DB 000h, 008h, 01Ch, 036h, 000h, 03Eh, 063h, 07Fh, 060h, 063h, 03Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 066h, 066h, 000h, 03Eh, 063h, 07Fh, 060h, 063h, 03Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 030h, 018h, 00Ch, 000h, 03Eh, 063h, 07Fh, 060h, 063h, 03Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 066h, 066h, 000h, 038h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 018h, 03Ch, 066h, 000h, 038h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 060h, 030h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 063h, 063h, 008h, 01Ch, 036h, 063h, 063h, 07Fh, 063h, 063h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 01Ch, 036h, 01Ch, 000h, 01Ch, 036h, 063h, 063h, 07Fh, 063h, 063h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 00Ch, 018h, 030h, 000h, 07Fh, 033h, 030h, 03Eh, 030h, 033h, 07Fh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 06Eh, 03Bh, 01Bh, 07Eh, 0D8h, 0DCh, 077h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 01Fh, 036h, 066h, 066h, 07Fh, 066h, 066h, 066h, 067h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 008h, 01Ch, 036h, 000h, 03Eh, 063h, 063h, 063h, 063h, 03Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 063h, 063h, 000h, 03Eh, 063h, 063h, 063h, 063h, 03Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 030h, 018h, 00Ch, 000h, 03Eh, 063h, 063h, 063h, 063h, 03Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 018h, 03Ch, 066h, 000h, 066h, 066h, 066h, 066h, 066h, 03Bh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 030h, 018h, 00Ch, 000h, 066h, 066h, 066h, 066h, 066h, 03Bh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 063h, 063h, 000h, 063h, 063h, 063h, 063h, 03Fh, 003h, 006h, 03Ch, 000h, 000h, 000h
|
||||
DB 000h, 063h, 063h, 01Ch, 036h, 063h, 063h, 063h, 063h, 036h, 01Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 063h, 063h, 000h, 063h, 063h, 063h, 063h, 063h, 063h, 03Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 018h, 018h, 07Eh, 0C3h, 0C0h, 0C0h, 0C3h, 07Eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 01Ch, 036h, 032h, 030h, 078h, 030h, 030h, 030h, 073h, 07Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 0C3h, 066h, 03Ch, 018h, 0FFh, 018h, 0FFh, 018h, 018h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 0FCh, 066h, 066h, 07Ch, 062h, 066h, 06Fh, 066h, 066h, 0F3h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 00Eh, 01Bh, 018h, 018h, 018h, 07Eh, 018h, 018h, 018h, 018h, 0D8h, 070h, 000h, 000h, 000h
|
||||
DB 000h, 00Ch, 018h, 030h, 000h, 03Ch, 006h, 03Eh, 066h, 066h, 03Bh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 00Ch, 018h, 030h, 000h, 038h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 00Ch, 018h, 030h, 000h, 03Eh, 063h, 063h, 063h, 063h, 03Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 00Ch, 018h, 030h, 000h, 066h, 066h, 066h, 066h, 066h, 03Bh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 03Bh, 06Eh, 000h, 06Eh, 033h, 033h, 033h, 033h, 033h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 03Bh, 06Eh, 000h, 063h, 073h, 07Bh, 07Fh, 06Fh, 067h, 063h, 063h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 03Ch, 06Ch, 06Ch, 03Eh, 000h, 07Eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 038h, 06Ch, 06Ch, 038h, 000h, 07Ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 018h, 018h, 000h, 018h, 018h, 030h, 063h, 063h, 03Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 07Fh, 060h, 060h, 060h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 07Fh, 003h, 003h, 003h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 060h, 0E0h, 063h, 066h, 06Ch, 018h, 030h, 06Eh, 0C3h, 006h, 00Ch, 01Fh, 000h, 000h, 000h
|
||||
DB 000h, 060h, 0E0h, 063h, 066h, 06Ch, 018h, 033h, 067h, 0CFh, 01Fh, 003h, 003h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 018h, 018h, 000h, 018h, 018h, 03Ch, 03Ch, 03Ch, 018h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 01Bh, 036h, 06Ch, 036h, 01Bh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 06Ch, 036h, 01Bh, 036h, 06Ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 000h, 000h
|
||||
DB 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 000h, 000h
|
||||
DB 0DDh, 077h, 0DDh, 077h, 0DDh, 077h, 0DDh, 077h, 0DDh, 077h, 0DDh, 077h, 0DDh, 077h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0F8h, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 0F8h, 018h, 0F8h, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0F6h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FEh, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 0F8h, 018h, 0F8h, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 0F6h, 006h, 0F6h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 0FEh, 006h, 0F6h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 0F6h, 006h, 0FEh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0FEh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 0F8h, 018h, 0F8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0F8h, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01Fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01Fh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0FFh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 01Fh, 018h, 01Fh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 037h, 030h, 03Fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 03Fh, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 0F7h, 000h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 0FFh, 000h, 0F7h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 037h, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 0FFh, 000h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 0F7h, 000h, 0F7h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 0FFh, 000h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 0FFh, 000h, 0FFh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 036h, 036h, 03Fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 01Fh, 018h, 01Fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 01Fh, 018h, 01Fh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 03Fh, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0FFh, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 0FFh, 018h, 0FFh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0F8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01Fh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 000h, 000h
|
||||
DB 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 000h, 000h
|
||||
DB 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 000h, 000h
|
||||
DB 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 03Bh, 06Eh, 06Ch, 06Ch, 06Eh, 03Bh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 03Eh, 063h, 07Eh, 063h, 063h, 07Eh, 060h, 060h, 020h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 07Fh, 063h, 063h, 060h, 060h, 060h, 060h, 060h, 060h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 07Fh, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 07Fh, 063h, 030h, 018h, 00Ch, 018h, 030h, 063h, 07Fh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 03Fh, 06Ch, 06Ch, 06Ch, 06Ch, 038h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 033h, 033h, 033h, 033h, 03Eh, 030h, 030h, 060h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 03Bh, 06Eh, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 07Eh, 018h, 03Ch, 066h, 066h, 066h, 03Ch, 018h, 07Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 01Ch, 036h, 063h, 063h, 07Fh, 063h, 063h, 036h, 01Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 01Ch, 036h, 063h, 063h, 063h, 036h, 036h, 036h, 077h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 01Eh, 030h, 018h, 00Ch, 03Eh, 066h, 066h, 066h, 03Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 07Eh, 0DBh, 0DBh, 07Eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 003h, 006h, 07Eh, 0DBh, 0DBh, 0F3h, 07Eh, 060h, 0C0h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 01Ch, 030h, 060h, 060h, 07Ch, 060h, 060h, 030h, 01Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 03Eh, 063h, 063h, 063h, 063h, 063h, 063h, 063h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 07Fh, 000h, 000h, 07Fh, 000h, 000h, 07Fh, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 018h, 018h, 018h, 0FFh, 018h, 018h, 018h, 000h, 0FFh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 030h, 018h, 00Ch, 006h, 00Ch, 018h, 030h, 000h, 07Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 00Ch, 018h, 030h, 060h, 030h, 018h, 00Ch, 000h, 07Eh, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 00Eh, 01Bh, 01Bh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h
|
||||
DB 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0D8h, 0D8h, 070h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 018h, 018h, 000h, 000h, 0FFh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 03Bh, 06Eh, 000h, 03Bh, 06Eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 038h, 06Ch, 06Ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 00Fh, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 0ECh, 06Ch, 03Ch, 01Ch, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 0D8h, 06Ch, 06Ch, 06Ch, 06Ch, 06Ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 070h, 0D8h, 030h, 060h, 0C8h, 0F8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 03Eh, 03Eh, 03Eh, 03Eh, 03Eh, 03Eh, 000h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
|
@ -0,0 +1,128 @@
|
|||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07Eh, 081h, 0A5h, 081h, 0BDh, 099h, 081h, 07Eh
|
||||
DB 07Eh, 0FFh, 0DBh, 0FFh, 0C3h, 0E7h, 0FFh, 07Eh, 06Ch, 0FEh, 0FEh, 0FEh, 07Ch, 038h, 010h, 000h
|
||||
DB 010h, 038h, 07Ch, 0FEh, 07Ch, 038h, 010h, 000h, 038h, 07Ch, 038h, 0FEh, 0FEh, 07Ch, 038h, 07Ch
|
||||
DB 010h, 010h, 038h, 07Ch, 0FEh, 07Ch, 038h, 07Ch, 000h, 000h, 018h, 03Ch, 03Ch, 018h, 000h, 000h
|
||||
DB 0FFh, 0FFh, 0E7h, 0C3h, 0C3h, 0E7h, 0FFh, 0FFh, 000h, 03Ch, 066h, 042h, 042h, 066h, 03Ch, 000h
|
||||
DB 0FFh, 0C3h, 099h, 0BDh, 0BDh, 099h, 0C3h, 0FFh, 00Fh, 007h, 00Fh, 07Dh, 0CCh, 0CCh, 0CCh, 078h
|
||||
DB 03Ch, 066h, 066h, 066h, 03Ch, 018h, 07Eh, 018h, 03Fh, 033h, 03Fh, 030h, 030h, 070h, 0F0h, 0E0h
|
||||
DB 07Fh, 063h, 07Fh, 063h, 063h, 067h, 0E6h, 0C0h, 099h, 05Ah, 03Ch, 0E7h, 0E7h, 03Ch, 05Ah, 099h
|
||||
DB 080h, 0E0h, 0F8h, 0FEh, 0F8h, 0E0h, 080h, 000h, 002h, 00Eh, 03Eh, 0FEh, 03Eh, 00Eh, 002h, 000h
|
||||
DB 018h, 03Ch, 07Eh, 018h, 018h, 07Eh, 03Ch, 018h, 066h, 066h, 066h, 066h, 066h, 000h, 066h, 000h
|
||||
DB 07Fh, 0DBh, 0DBh, 07Bh, 01Bh, 01Bh, 01Bh, 000h, 03Eh, 063h, 038h, 06Ch, 06Ch, 038h, 0CCh, 078h
|
||||
DB 000h, 000h, 000h, 000h, 07Eh, 07Eh, 07Eh, 000h, 018h, 03Ch, 07Eh, 018h, 07Eh, 03Ch, 018h, 0FFh
|
||||
DB 018h, 03Ch, 07Eh, 018h, 018h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 07Eh, 03Ch, 018h, 000h
|
||||
DB 000h, 018h, 00Ch, 0FEh, 00Ch, 018h, 000h, 000h, 000h, 030h, 060h, 0FEh, 060h, 030h, 000h, 000h
|
||||
DB 000h, 000h, 0C0h, 0C0h, 0C0h, 0FEh, 000h, 000h, 000h, 024h, 066h, 0FFh, 066h, 024h, 000h, 000h
|
||||
DB 000h, 018h, 03Ch, 07Eh, 0FFh, 0FFh, 000h, 000h, 000h, 0FFh, 0FFh, 07Eh, 03Ch, 018h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 040h, 040h, 040h, 040h, 040h, 000h, 040h, 000h
|
||||
DB 090h, 090h, 000h, 000h, 000h, 000h, 000h, 000h, 050h, 050h, 0F8h, 050h, 0F8h, 050h, 050h, 000h
|
||||
DB 020h, 078h, 0A0h, 070h, 028h, 0F0h, 020h, 000h, 0C8h, 0C8h, 010h, 020h, 040h, 098h, 098h, 000h
|
||||
DB 070h, 088h, 050h, 020h, 054h, 088h, 074h, 000h, 060h, 020h, 040h, 000h, 000h, 000h, 000h, 000h
|
||||
DB 020h, 040h, 080h, 080h, 080h, 040h, 020h, 000h, 020h, 010h, 008h, 008h, 008h, 010h, 020h, 000h
|
||||
DB 000h, 020h, 0A8h, 070h, 070h, 0A8h, 020h, 000h, 000h, 000h, 020h, 020h, 0F8h, 020h, 020h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 060h, 020h, 040h, 000h, 000h, 000h, 000h, 0F8h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 000h, 060h, 060h, 000h, 002h, 004h, 008h, 010h, 020h, 040h, 080h, 000h
|
||||
DB 070h, 088h, 098h, 0A8h, 0C8h, 088h, 070h, 000h, 040h, 0C0h, 040h, 040h, 040h, 040h, 0E0h, 000h
|
||||
DB 070h, 088h, 008h, 010h, 020h, 040h, 0F8h, 000h, 070h, 088h, 008h, 010h, 008h, 088h, 070h, 000h
|
||||
DB 008h, 018h, 028h, 048h, 0FCh, 008h, 008h, 000h, 0F8h, 080h, 080h, 0F0h, 008h, 088h, 070h, 000h
|
||||
DB 020h, 040h, 080h, 0F0h, 088h, 088h, 070h, 000h, 0F8h, 008h, 010h, 020h, 040h, 040h, 040h, 000h
|
||||
DB 070h, 088h, 088h, 070h, 088h, 088h, 070h, 000h, 070h, 088h, 088h, 078h, 008h, 008h, 070h, 000h
|
||||
DB 000h, 000h, 060h, 060h, 000h, 060h, 060h, 000h, 000h, 000h, 060h, 060h, 000h, 060h, 060h, 020h
|
||||
DB 010h, 020h, 040h, 080h, 040h, 020h, 010h, 000h, 000h, 000h, 0F8h, 000h, 0F8h, 000h, 000h, 000h
|
||||
DB 080h, 040h, 020h, 010h, 020h, 040h, 080h, 000h, 078h, 084h, 004h, 008h, 010h, 000h, 010h, 000h
|
||||
DB 070h, 088h, 088h, 0A8h, 0B8h, 080h, 078h, 000h, 020h, 050h, 088h, 088h, 0F8h, 088h, 088h, 000h
|
||||
DB 0F0h, 088h, 088h, 0F0h, 088h, 088h, 0F0h, 000h, 070h, 088h, 080h, 080h, 080h, 088h, 070h, 000h
|
||||
DB 0F0h, 088h, 088h, 088h, 088h, 088h, 0F0h, 000h, 0F8h, 080h, 080h, 0E0h, 080h, 080h, 0F8h, 000h
|
||||
DB 0F8h, 080h, 080h, 0E0h, 080h, 080h, 080h, 000h, 070h, 088h, 080h, 080h, 098h, 088h, 078h, 000h
|
||||
DB 088h, 088h, 088h, 0F8h, 088h, 088h, 088h, 000h, 0E0h, 040h, 040h, 040h, 040h, 040h, 0E0h, 000h
|
||||
DB 038h, 010h, 010h, 010h, 010h, 090h, 060h, 000h, 088h, 090h, 0A0h, 0C0h, 0A0h, 090h, 088h, 000h
|
||||
DB 080h, 080h, 080h, 080h, 080h, 080h, 0F8h, 000h, 082h, 0C6h, 0AAh, 092h, 082h, 082h, 082h, 000h
|
||||
DB 084h, 0C4h, 0A4h, 094h, 08Ch, 084h, 084h, 000h, 070h, 088h, 088h, 088h, 088h, 088h, 070h, 000h
|
||||
DB 0F0h, 088h, 088h, 0F0h, 080h, 080h, 080h, 000h, 070h, 088h, 088h, 088h, 0A8h, 090h, 068h, 000h
|
||||
DB 0F0h, 088h, 088h, 0F0h, 0A0h, 090h, 088h, 000h, 070h, 088h, 080h, 070h, 008h, 088h, 070h, 000h
|
||||
DB 0F8h, 020h, 020h, 020h, 020h, 020h, 020h, 000h, 088h, 088h, 088h, 088h, 088h, 088h, 070h, 000h
|
||||
DB 088h, 088h, 088h, 050h, 050h, 020h, 020h, 000h, 082h, 082h, 082h, 082h, 092h, 092h, 06Ch, 000h
|
||||
DB 088h, 088h, 050h, 020h, 050h, 088h, 088h, 000h, 088h, 088h, 088h, 050h, 020h, 020h, 020h, 000h
|
||||
DB 0F8h, 008h, 010h, 020h, 040h, 080h, 0F8h, 000h, 0E0h, 080h, 080h, 080h, 080h, 080h, 0E0h, 000h
|
||||
DB 080h, 040h, 020h, 010h, 008h, 004h, 002h, 000h, 0E0h, 020h, 020h, 020h, 020h, 020h, 0E0h, 000h
|
||||
DB 020h, 050h, 088h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0F8h, 000h
|
||||
DB 040h, 020h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 070h, 008h, 078h, 088h, 074h, 000h
|
||||
DB 080h, 080h, 0B0h, 0C8h, 088h, 0C8h, 0B0h, 000h, 000h, 000h, 070h, 088h, 080h, 088h, 070h, 000h
|
||||
DB 008h, 008h, 068h, 098h, 088h, 098h, 068h, 000h, 000h, 000h, 070h, 088h, 0F8h, 080h, 070h, 000h
|
||||
DB 030h, 048h, 040h, 0E0h, 040h, 040h, 040h, 000h, 000h, 000h, 034h, 048h, 048h, 038h, 008h, 030h
|
||||
DB 080h, 080h, 0B0h, 0C8h, 088h, 088h, 088h, 000h, 020h, 000h, 060h, 020h, 020h, 020h, 070h, 000h
|
||||
DB 010h, 000h, 030h, 010h, 010h, 010h, 090h, 060h, 080h, 080h, 088h, 090h, 0A0h, 0D0h, 088h, 000h
|
||||
DB 0C0h, 040h, 040h, 040h, 040h, 040h, 0E0h, 000h, 000h, 000h, 0ECh, 092h, 092h, 092h, 092h, 000h
|
||||
DB 000h, 000h, 0B0h, 0C8h, 088h, 088h, 088h, 000h, 000h, 000h, 070h, 088h, 088h, 088h, 070h, 000h
|
||||
DB 000h, 000h, 0B0h, 0C8h, 0C8h, 0B0h, 080h, 080h, 000h, 000h, 068h, 098h, 098h, 068h, 008h, 008h
|
||||
DB 000h, 000h, 0B0h, 0C8h, 080h, 080h, 080h, 000h, 000h, 000h, 078h, 080h, 070h, 008h, 0F0h, 000h
|
||||
DB 040h, 040h, 0E0h, 040h, 040h, 050h, 020h, 000h, 000h, 000h, 088h, 088h, 088h, 098h, 068h, 000h
|
||||
DB 000h, 000h, 088h, 088h, 088h, 050h, 020h, 000h, 000h, 000h, 082h, 082h, 092h, 092h, 06Ch, 000h
|
||||
DB 000h, 000h, 088h, 050h, 020h, 050h, 088h, 000h, 000h, 000h, 088h, 088h, 098h, 068h, 008h, 070h
|
||||
DB 000h, 000h, 0F8h, 010h, 020h, 040h, 0F8h, 000h, 010h, 020h, 020h, 040h, 020h, 020h, 010h, 000h
|
||||
DB 040h, 040h, 040h, 000h, 040h, 040h, 040h, 000h, 040h, 020h, 020h, 010h, 020h, 020h, 040h, 000h
|
||||
DB 076h, 0DCh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 06Ch, 0C6h, 0C6h, 0FEh, 000h
|
||||
DB 03Eh, 060h, 0C0h, 060h, 03Eh, 008h, 004h, 018h, 000h, 048h, 000h, 0CCh, 0CCh, 0CCh, 0CCh, 076h
|
||||
DB 018h, 020h, 000h, 078h, 0CCh, 0FCh, 0C0h, 078h, 010h, 028h, 000h, 078h, 00Ch, 07Ch, 0CCh, 076h
|
||||
DB 000h, 048h, 000h, 078h, 00Ch, 07Ch, 0CCh, 076h, 030h, 008h, 000h, 078h, 00Ch, 07Ch, 0CCh, 076h
|
||||
DB 048h, 030h, 000h, 078h, 00Ch, 07Ch, 0CCh, 076h, 078h, 0CCh, 0C0h, 0CCh, 078h, 010h, 008h, 030h
|
||||
DB 030h, 048h, 084h, 078h, 0CCh, 0FCh, 0C0h, 078h, 000h, 048h, 000h, 078h, 0CCh, 0FCh, 0C0h, 078h
|
||||
DB 030h, 008h, 000h, 078h, 0CCh, 0FCh, 0C0h, 078h, 000h, 048h, 000h, 030h, 030h, 030h, 030h, 030h
|
||||
DB 030h, 048h, 000h, 030h, 030h, 030h, 030h, 030h, 060h, 010h, 000h, 030h, 030h, 030h, 030h, 030h
|
||||
DB 048h, 000h, 030h, 078h, 0CCh, 0CCh, 0FCh, 0CCh, 030h, 048h, 030h, 048h, 084h, 0FCh, 084h, 084h
|
||||
DB 018h, 020h, 000h, 0F8h, 080h, 0F0h, 080h, 0F8h, 000h, 000h, 000h, 066h, 019h, 077h, 088h, 077h
|
||||
DB 000h, 000h, 000h, 00Fh, 014h, 03Eh, 044h, 087h, 030h, 048h, 084h, 078h, 0CCh, 0CCh, 0CCh, 078h
|
||||
DB 000h, 048h, 000h, 078h, 0CCh, 0CCh, 0CCh, 078h, 060h, 010h, 000h, 078h, 0CCh, 0CCh, 0CCh, 078h
|
||||
DB 030h, 048h, 084h, 000h, 0CCh, 0CCh, 0CCh, 076h, 060h, 010h, 000h, 0CCh, 0CCh, 0CCh, 0CCh, 076h
|
||||
DB 048h, 000h, 0CCh, 0CCh, 0CCh, 07Ch, 00Ch, 0F8h, 044h, 000h, 038h, 06Ch, 0C6h, 0C6h, 06Ch, 038h
|
||||
DB 024h, 000h, 066h, 066h, 066h, 066h, 066h, 03Ch, 000h, 008h, 01Ch, 028h, 028h, 01Ch, 008h, 000h
|
||||
DB 01Ch, 022h, 020h, 070h, 020h, 022h, 05Ch, 000h, 044h, 028h, 010h, 010h, 038h, 010h, 038h, 010h
|
||||
DB 0F0h, 088h, 08Ah, 0F7h, 082h, 082h, 083h, 000h, 006h, 008h, 008h, 03Ch, 010h, 010h, 060h, 000h
|
||||
DB 018h, 020h, 000h, 078h, 00Ch, 07Ch, 0CCh, 076h, 018h, 020h, 000h, 030h, 030h, 030h, 030h, 030h
|
||||
DB 018h, 020h, 000h, 078h, 0CCh, 0CCh, 0CCh, 078h, 018h, 020h, 000h, 0CCh, 0CCh, 0CCh, 0CCh, 076h
|
||||
DB 080h, 078h, 004h, 0F8h, 0CCh, 0CCh, 0CCh, 0CCh, 080h, 07Eh, 001h, 0C6h, 0E6h, 0D6h, 0CEh, 0C6h
|
||||
DB 000h, 078h, 00Ch, 07Ch, 0CCh, 076h, 000h, 0FEh, 000h, 078h, 0CCh, 0CCh, 0CCh, 078h, 000h, 0FCh
|
||||
DB 000h, 000h, 018h, 018h, 030h, 060h, 066h, 03Ch, 0FFh, 080h, 080h, 080h, 000h, 000h, 000h, 000h
|
||||
DB 0FFh, 001h, 001h, 001h, 000h, 000h, 000h, 000h, 040h, 0C4h, 048h, 050h, 026h, 049h, 082h, 007h
|
||||
DB 040h, 0C4h, 048h, 050h, 026h, 04Ah, 09Fh, 002h, 000h, 030h, 000h, 030h, 030h, 030h, 030h, 030h
|
||||
DB 000h, 012h, 024h, 048h, 090h, 048h, 024h, 012h, 000h, 048h, 024h, 012h, 009h, 012h, 024h, 048h
|
||||
DB 049h, 000h, 092h, 000h, 049h, 000h, 092h, 000h, 06Dh, 000h, 0B6h, 000h, 06Dh, 000h, 0B6h, 000h
|
||||
DB 0AAh, 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 055h, 010h, 010h, 010h, 010h, 010h, 010h, 010h, 010h
|
||||
DB 010h, 010h, 010h, 010h, 0F0h, 010h, 010h, 010h, 010h, 010h, 010h, 0F0h, 010h, 0F0h, 010h, 010h
|
||||
DB 028h, 028h, 028h, 028h, 0E8h, 028h, 028h, 028h, 000h, 000h, 000h, 000h, 0F8h, 028h, 028h, 028h
|
||||
DB 000h, 000h, 000h, 0F0h, 010h, 0F0h, 010h, 010h, 028h, 028h, 028h, 0E8h, 008h, 0E8h, 028h, 028h
|
||||
DB 028h, 028h, 028h, 028h, 028h, 028h, 028h, 028h, 000h, 000h, 000h, 0F8h, 008h, 0E8h, 028h, 028h
|
||||
DB 028h, 028h, 028h, 0E8h, 008h, 0F8h, 000h, 000h, 028h, 028h, 028h, 028h, 0F8h, 000h, 000h, 000h
|
||||
DB 010h, 010h, 010h, 0F0h, 010h, 0F0h, 000h, 000h, 000h, 000h, 000h, 000h, 0F0h, 010h, 010h, 010h
|
||||
DB 010h, 010h, 010h, 010h, 01Fh, 000h, 000h, 000h, 010h, 010h, 010h, 010h, 0FFh, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 0FFh, 010h, 010h, 010h, 010h, 010h, 010h, 010h, 01Fh, 010h, 010h, 010h
|
||||
DB 000h, 000h, 000h, 000h, 0FFh, 000h, 000h, 000h, 010h, 010h, 010h, 010h, 0FFh, 010h, 010h, 010h
|
||||
DB 010h, 010h, 010h, 01Fh, 010h, 01Fh, 010h, 010h, 028h, 028h, 028h, 028h, 03Fh, 028h, 028h, 028h
|
||||
DB 028h, 028h, 028h, 02Fh, 020h, 03Fh, 000h, 000h, 000h, 000h, 000h, 03Fh, 020h, 02Fh, 028h, 028h
|
||||
DB 028h, 028h, 028h, 0EFh, 000h, 0FFh, 000h, 000h, 000h, 000h, 000h, 0FFh, 000h, 0EFh, 028h, 028h
|
||||
DB 028h, 028h, 028h, 02Fh, 020h, 02Fh, 028h, 028h, 000h, 000h, 000h, 0FFh, 000h, 0FFh, 000h, 000h
|
||||
DB 028h, 028h, 028h, 0EFh, 000h, 0EFh, 028h, 028h, 010h, 010h, 010h, 0FFh, 000h, 0FFh, 000h, 000h
|
||||
DB 028h, 028h, 028h, 028h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 000h, 0FFh, 010h, 010h
|
||||
DB 000h, 000h, 000h, 000h, 0FFh, 028h, 028h, 028h, 028h, 028h, 028h, 028h, 03Fh, 000h, 000h, 000h
|
||||
DB 010h, 010h, 010h, 01Fh, 010h, 01Fh, 000h, 000h, 000h, 000h, 000h, 01Fh, 010h, 01Fh, 010h, 010h
|
||||
DB 000h, 000h, 000h, 000h, 03Fh, 028h, 028h, 028h, 028h, 028h, 028h, 028h, 0FFh, 028h, 028h, 028h
|
||||
DB 010h, 010h, 010h, 0FFh, 010h, 0FFh, 010h, 010h, 010h, 010h, 010h, 010h, 0F0h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 01Fh, 010h, 010h, 010h, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh
|
||||
DB 000h, 000h, 000h, 000h, 0FFh, 0FFh, 0FFh, 000h, 0E0h, 0E0h, 0E0h, 0E0h, 0E0h, 0E0h, 0E0h, 0E0h
|
||||
DB 007h, 007h, 007h, 007h, 007h, 007h, 007h, 007h, 0FFh, 0FFh, 0FFh, 0FFh, 000h, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 002h, 034h, 04Ch, 04Ch, 032h, 000h, 05Ch, 022h, 022h, 03Ch, 044h, 044h, 078h
|
||||
DB 07Eh, 042h, 042h, 040h, 040h, 040h, 040h, 040h, 000h, 000h, 002h, 07Ch, 0A8h, 028h, 028h, 044h
|
||||
DB 000h, 07Eh, 061h, 030h, 018h, 008h, 010h, 020h, 000h, 000h, 008h, 07Fh, 088h, 088h, 088h, 070h
|
||||
DB 000h, 000h, 000h, 022h, 044h, 044h, 07Ah, 080h, 000h, 000h, 000h, 07Ch, 010h, 010h, 010h, 010h
|
||||
DB 000h, 01Ch, 008h, 03Eh, 041h, 041h, 041h, 03Eh, 000h, 000h, 038h, 044h, 044h, 07Ch, 044h, 044h
|
||||
DB 03Ch, 066h, 0C3h, 0C3h, 0C3h, 066h, 024h, 066h, 00Ch, 010h, 008h, 01Ch, 022h, 022h, 022h, 01Ch
|
||||
DB 000h, 000h, 000h, 000h, 06Ch, 092h, 092h, 06Ch, 000h, 001h, 01Ah, 026h, 02Ah, 032h, 02Ch, 040h
|
||||
DB 000h, 018h, 020h, 020h, 030h, 020h, 020h, 018h, 000h, 03Ch, 042h, 042h, 042h, 042h, 042h, 042h
|
||||
DB 000h, 000h, 07Eh, 000h, 07Eh, 000h, 07Eh, 000h, 000h, 008h, 008h, 03Eh, 008h, 008h, 000h, 03Eh
|
||||
DB 000h, 010h, 008h, 004h, 008h, 010h, 000h, 03Eh, 000h, 004h, 008h, 010h, 008h, 004h, 000h, 03Eh
|
||||
DB 000h, 006h, 009h, 009h, 008h, 008h, 008h, 000h, 000h, 000h, 008h, 008h, 008h, 048h, 048h, 030h
|
||||
DB 000h, 000h, 008h, 000h, 03Eh, 000h, 008h, 000h, 000h, 060h, 092h, 00Ch, 060h, 092h, 00Ch, 000h
|
||||
DB 060h, 090h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 078h, 030h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 000h, 020h, 000h, 000h, 000h, 000h, 003h, 004h, 004h, 0C8h, 028h, 010h, 000h
|
||||
DB 000h, 000h, 000h, 07Ch, 042h, 042h, 042h, 000h, 018h, 024h, 008h, 010h, 03Ch, 000h, 000h, 000h
|
||||
DB 000h, 000h, 000h, 03Eh, 03Eh, 03Eh, 03Eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
|
|
@ -0,0 +1,16 @@
|
|||
lnk_boot = tlink /x
|
||||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
|
||||
all: setup.com
|
||||
|
||||
setup.com: setup.asm
|
||||
$(asm) setup
|
||||
$(lnk) setup
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.com
|
||||
del *.sys
|
||||
del *.err
|
|
@ -0,0 +1,169 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
ent equ 32h
|
||||
|
||||
start:
|
||||
jmp CopyCOS
|
||||
|
||||
Message db 0Dh,0Ah,'COS 2000 V3.02Fr programme d''installation',0Dh,0AH,'Inserez une disquette formatee et appuyez sur entre...',0Dh,0AH,'Attention le contenu de celle ci peut etre altere !!!',0Dh,0AH,'$'
|
||||
Message2 db 0Dh,0AH,'Creation du secteur de demarrage...',0Dh,0Ah,'$'
|
||||
Message3 db 0Dh,0AH,'Copie des fichiers systeme...',0Dh,0Ah,'$'
|
||||
Errormsg db 0Dh,0AH,'Erreur d''installation, contactez moi a COS2000@MULTIMANIA.COM !',0Dh,0AH,'$'
|
||||
Ok db 0Dh,0AH,'COS2000 a été correctement installé, veuillez redemarrer votre PC',0Dh,0AH,'$'
|
||||
files db '*.*',0
|
||||
boot db 'boot.bin',0
|
||||
dat db 'data',0
|
||||
retu db 0Dh,0AH,'$'
|
||||
dta db 43 dup (0)
|
||||
nom db 25 dup (0)
|
||||
|
||||
copycos:
|
||||
mov ah,9
|
||||
mov dx,offset message
|
||||
int 21h
|
||||
xor ax,ax
|
||||
int 16h
|
||||
mov ah,4ah
|
||||
mov bx,1000h
|
||||
int 21h
|
||||
jc error
|
||||
mov ah,48h
|
||||
mov bx,65536/16
|
||||
int 21h
|
||||
jc error
|
||||
mov fs,ax
|
||||
mov ah,3Bh
|
||||
mov dx,offset dat
|
||||
int 21h
|
||||
jc error
|
||||
mov ah,1Ah
|
||||
mov dx,offset dta
|
||||
int 21h
|
||||
jc error
|
||||
mov ah,4eh
|
||||
xor cx,cx
|
||||
mov dx,offset files
|
||||
int 21h
|
||||
jc error
|
||||
mov ah,09
|
||||
mov dx,offset message3
|
||||
int 21h
|
||||
allfile:
|
||||
mov byte ptr [offset dta+43],'$'
|
||||
mov ah,9
|
||||
mov dx,offset dta+30
|
||||
int 21h
|
||||
push dx
|
||||
mov ah,09
|
||||
mov dx,offset retu
|
||||
int 21h
|
||||
pop dx
|
||||
mov ax,3D00h
|
||||
int 21h
|
||||
jc error
|
||||
mov bx,ax
|
||||
mov ax,4202h
|
||||
xor cx,cx
|
||||
xor dx,dx
|
||||
int 21h
|
||||
jc error
|
||||
cmp dx,0
|
||||
jne error
|
||||
cmp ax,0
|
||||
je error
|
||||
mov bp,ax
|
||||
mov ax,4200h
|
||||
xor cx,cx
|
||||
xor dx,dx
|
||||
int 21h
|
||||
jc error
|
||||
push fs
|
||||
pop ds
|
||||
mov ah,3fh
|
||||
mov cx,0FFFFh
|
||||
xor dx,dx
|
||||
int 21h
|
||||
push cs
|
||||
pop ds
|
||||
jc error
|
||||
mov ah,3eh
|
||||
int 21h
|
||||
jc error
|
||||
mov ah,3ch
|
||||
push cs
|
||||
pop es
|
||||
mov si,offset dta+30-3
|
||||
mov di,offset nom
|
||||
mov cx,25
|
||||
rep movsb
|
||||
mov di,offset nom
|
||||
mov word ptr [di],":a"
|
||||
mov byte ptr [di+2],"\"
|
||||
xor cx,cx
|
||||
mov dx,di
|
||||
int 21h
|
||||
jc error
|
||||
mov bx,ax
|
||||
push fs
|
||||
pop ds
|
||||
xor dx,dx
|
||||
mov ah,40h
|
||||
mov cx,bp
|
||||
int 21h
|
||||
push cs
|
||||
pop ds
|
||||
jc error
|
||||
mov ah,3eh
|
||||
int 21h
|
||||
jc error
|
||||
mov ah,4fh
|
||||
int 21h
|
||||
jnc allfile
|
||||
mov ah,09
|
||||
mov dx,offset message2
|
||||
int 21h
|
||||
mov ax,3D00h
|
||||
mov dx,offset boot
|
||||
int 21h
|
||||
jc error
|
||||
push fs
|
||||
pop ds
|
||||
mov ah,3fh
|
||||
mov cx,000FFh
|
||||
xor dx,dx
|
||||
int 21h
|
||||
push cs
|
||||
pop ds
|
||||
jc error
|
||||
mov ah,3eh
|
||||
int 21h
|
||||
jc error
|
||||
push fs
|
||||
pop es
|
||||
mov ax,0301h
|
||||
mov dx,0
|
||||
mov cx,0001h
|
||||
xor bx,bx
|
||||
int 13h
|
||||
mov ah,09
|
||||
mov dx,offset Ok
|
||||
int 21h
|
||||
xor ax,ax
|
||||
int 16h
|
||||
ret
|
||||
|
||||
|
||||
error:
|
||||
mov ah,09
|
||||
mov dx,offset errormsg
|
||||
int 21h
|
||||
xor ax,ax
|
||||
int 16h
|
||||
ret
|
||||
|
||||
end start
|
|
@ -0,0 +1,266 @@
|
|||
;****************************************************************
|
||||
; *
|
||||
; Periph‚rique : DMA *
|
||||
; Plages Entr‚es-Sorties : 0000-000F *
|
||||
; 00C0-00DF *
|
||||
; 0080-0090 *
|
||||
; (0094-009F) *
|
||||
; Plages M‚moires : AUCUNES *
|
||||
; *
|
||||
DmaRead equ 044h ;I/O to memory, no autoinit, increment, single mode
|
||||
DmaWrite equ 048h ;Memory to I/O, no autoinit, increment, single mode
|
||||
|
||||
;Lecture des bits du registre d'‚tat (08, D0 )
|
||||
STATUS_REQ3 = 80h ;Bit actif: le canal DMA concern‚
|
||||
STATUS_REQ2 = 40h ;re‡oit une requˆte DMA
|
||||
STATUS_REQ1 = 20h ;Request
|
||||
STATUS_REQ0 = 10h
|
||||
STATUS_TC3 = 08h ;Bit actif: Un transfert DMA a ‚t‚
|
||||
STATUS_TC2 = 04h ;ex‚cut‚ depuis la derniŠre lecture
|
||||
STATUS_TC1 = 02h ;du registre d'‚tat.
|
||||
STATUS_TC0 = 01h ;Terminal Count
|
||||
|
||||
;Ecriture des bits du registre de commande (08, D0)
|
||||
COMMAND_DACKLEVEL = 80h ;Bit 7 actif: ligne DMA Acknowledge HIGH active
|
||||
COMMAND_DREQLEVEL = 40h ;Bit 6 actif: ligne REQ Acknowledge LOW active
|
||||
COMMAND_EXTWRITE = 20h ;Bit 5 actif: EXTENDED Write,sinon LATE Write
|
||||
COMMAND_FIXEDPRI = 10h ;Bit 4 actif: priorit‚ constante
|
||||
COMMAND_COMPRESS = 08h ;Bit 3 actif: compression
|
||||
COMMAND_INACTIVE = 04h ;Bit 2 actif: contr“leur d‚sactiv‚
|
||||
COMMAND_ADH0 = 02h ;Bit 1 actif: Adress Hold pour canal 0/4 d‚sactiv‚
|
||||
COMMAND_MEM2MEM = 01h ;Bit 0 actif: m‚moire/m‚moire, sinon m‚moire/p‚riph‚rie
|
||||
|
||||
;Ecriture des bits du registre de requˆte ( 09, D2 )
|
||||
REQUEST_RESERVED = 0F8h ;R‚glage des bits r‚serv‚s =0
|
||||
REQUEST_SET = 04h ;D‚finir requˆte DMA
|
||||
REQUEST_CLR = 00h ;Supprimer requˆte DMA
|
||||
REQUEST_MSK = 03h ;Indiquer le canal dans les deux bits du bas
|
||||
|
||||
;Ecriture des bits du registre de masquage de canal ( 0A, D4 )
|
||||
CHANNEL_RESERVED = 0F8h ;R‚glage des bits r‚serv‚s =0
|
||||
CHANNEL_SET = 04h ;Masquer/verrouiller canal DMA
|
||||
CHANNEL_CLR = 00h ;Lib‚rer canal DMA
|
||||
CHANNEL_MSK = 03h ;Indiquer le canal dans les deux bits du bas
|
||||
|
||||
;Ecriture des bits du registre de mode (0B,D6)
|
||||
MODE_DEMAND = 00h ;Transf‚rer … la demande
|
||||
MODE_SINGLE = 40h ;Transf‚rer valeurs uniques
|
||||
MODE_BLOCK = 80h ;Transf‚rer en bloc
|
||||
MODE_CASCADE = 0C0h ;Transf‚rer en cascade
|
||||
MODE_DECREMENT = 20h ;D‚cr‚menter
|
||||
MODE_AUTOINIT = 10h ;Autoinitialisation vers la fin
|
||||
MODE_VERIFY = 00h ;V‚rifier
|
||||
MODE_WRITE = 04h ;Ecrire dans la m‚moire
|
||||
MODE_READ = 08h ;Lire depuis la m‚moire
|
||||
MODE_INVALID = 0Ch ;Incorrect
|
||||
MODE_CHANNELMSK = 03h ;Indiquer le canal dans les deux bits du bas
|
||||
|
||||
;Ports du DMA esclave
|
||||
|
||||
DmaStatusS dw 08h ;R SLAVE Registre d'‚tat
|
||||
DmaCommandS dw 08h ;W SLAVE Registre de commande
|
||||
DmaRequestS dw 09h ;W SLAVE Ex‚cuter requˆte DMA
|
||||
DmachMaskS dw 0ah ;W SLAVE Masquer canaux
|
||||
DmaModeS dw 0bh ;W SLAVE Mode de transfert
|
||||
DmaFlipFlopS dw 0ch ;W SLAVE Flipflop adr/compteur
|
||||
DmaTempS dw 0dh ;R SLAVE Reset du contr“leur
|
||||
DmaClearS dw 0dh ;R SLAVE Registre temporaire
|
||||
DmaMaskClrS dw 0eh ;R SLAVE Lib‚rer canaux
|
||||
DmaMaskS dw 0fh ;R SLAVE Masquer canaux
|
||||
|
||||
;Ports du DMA esclave
|
||||
|
||||
DmaStatusM dw 0D0h ;R MASTER Registre d'‚tat
|
||||
DmaCommandM dw 0D0h ;W MASTER Registre de commande
|
||||
DmaRequestM dw 0D2h ;W MASTER Ex‚cuter requˆte DMA
|
||||
DmaMaskM dw 0D4h ;W MASTER Masquer canaux
|
||||
DmaModeM dw 0D6h ;W MASTER Mode de transfert
|
||||
DmaFlipFlopM dw 0D8h ;W MASTER Flipflop adr/compteur
|
||||
DmaTempM dw 0DAh ;R MASTER Reset du contr“leur
|
||||
DmaClearM dw 0DAh ;R MASTER Registre temporaire
|
||||
DmaMaskClrM dw 0DCh ;R MASTER Lib‚rer canaux
|
||||
DmaMaskM2 dw 0DEh ;R MASTER Masquer canaux
|
||||
|
||||
DmaAdress db 00h ;DMA address register 0
|
||||
db 002h ;DMA address register 1
|
||||
db 004h ;DMA address register 2
|
||||
db 006h ;DMA address register 3
|
||||
db 0c0h ;DMA address register 4
|
||||
db 0c4h ;DMA address register 5
|
||||
db 0c8h ;DMA address register 6
|
||||
db 0cch ;DMA address register 7
|
||||
|
||||
DmaCount db 001h ;DMA count registers 0
|
||||
db 003h ;DMA count registers 1
|
||||
db 005h ;DMA count registers 2
|
||||
db 007h ;DMA count registers 3
|
||||
db 0c2h ;DMA count registers 4
|
||||
db 0c6h ;DMA count registers 5
|
||||
db 0cah ;DMA count registers 6
|
||||
db 0ceh ;DMA count registers 7
|
||||
|
||||
DmaPage db 087h ;DMA page registers 0
|
||||
db 083h ;DMA page registers 1
|
||||
db 081h ;DMA page registers 2
|
||||
db 082h ;DMA page registers 3
|
||||
db 08fh ;DMA page registers 4
|
||||
db 08bh ;DMA page registers 5
|
||||
db 089h ;DMA page registers 6
|
||||
db 08ah ;DMA page registers 7
|
||||
|
||||
;verouille le canal AL
|
||||
DisableDma:
|
||||
push ax dx
|
||||
cmp al, 4
|
||||
jae MasterDisableDma
|
||||
mov dx, DmaMaskS
|
||||
or al, 00000100b
|
||||
out dx, al
|
||||
jmp EndDisableDma
|
||||
MasterDisableDma:
|
||||
mov dx, DmaMaskS
|
||||
and al, 00000011b
|
||||
or al, 00000100b
|
||||
out dx, al
|
||||
EndDisableDma:
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
;déverouille le canal AL
|
||||
EnableDma:
|
||||
push ax dx
|
||||
cmp al, 4
|
||||
jae MasterDisableDma
|
||||
mov dx, DmaMaskS
|
||||
out dx, al
|
||||
jmp EndEnableDma
|
||||
MasterEnableDma:
|
||||
mov dx, DmaMaskS
|
||||
and al, 00000011b
|
||||
out dx, al
|
||||
EndEnableDma:
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
;Efface le FlipFlop canal AL
|
||||
ClrDmaFlipFlop:
|
||||
push ax dx
|
||||
cmp al, 4
|
||||
jae MasterClrFlipFlopDma
|
||||
mov dx,DmaFlipFlopS
|
||||
xor ax, ax
|
||||
out dx, al
|
||||
jmp EndClrFlipFlopDma
|
||||
MasterClrFlipFlopDma:
|
||||
mov dx,DmaFlipFlopM
|
||||
xor ax, ax
|
||||
out dx, al
|
||||
EndClrFlipFlopDma:
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
;Met le mode du canal al à ah
|
||||
SetDmaMode:
|
||||
push ax dx
|
||||
cmp al, 4
|
||||
jae MasterSetDmaMode
|
||||
mov dx,DmaModeS
|
||||
or al, ah
|
||||
out dx, al
|
||||
jmp EndSetDmaMode
|
||||
MasterSetDmaMode:
|
||||
mov dx,DmaModeM
|
||||
and al, 00000011b
|
||||
or al, ah
|
||||
out dx, al
|
||||
EndSetDmaMode:
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
|
||||
;Met le page du canal al a ah
|
||||
SetDmaPage:
|
||||
push ax bx dx si
|
||||
cmp al, 4
|
||||
jae MasterSetDmaPage
|
||||
mov si, offset DmaPage
|
||||
xor dh, dh
|
||||
xor bh, bh
|
||||
mov bl, al
|
||||
mov dl, cs:[si+bx]
|
||||
xchg al, ah
|
||||
out dx, al
|
||||
jmp EndSetDmaPage
|
||||
MasterSetDmaPage:
|
||||
EndSetDmaPage:
|
||||
pop si dx bx ax
|
||||
ret
|
||||
|
||||
;Met l'adresse du canal al a DS:BX
|
||||
SetDmaAdress:
|
||||
push ax bx cx dx si
|
||||
push ax
|
||||
mov ax, ds
|
||||
and ax, 0000111111111111b
|
||||
shl ax,4
|
||||
add bx, ax
|
||||
mov ax, ds
|
||||
and ax, 1111000000000000b
|
||||
shr ax, 4
|
||||
mov cx,ax
|
||||
pop ax
|
||||
push ax
|
||||
add ax,cx
|
||||
call SetDmaPage
|
||||
pop ax
|
||||
call ClrDmaFlipFlop
|
||||
mov si, offset DmaAdress
|
||||
xor dh, dh
|
||||
push bx
|
||||
xor bh, bh
|
||||
mov bl, al
|
||||
mov dl, byte ptr cs:[si+bx]
|
||||
pop bx
|
||||
cmp al, 4
|
||||
jae MasterSetDmaAddress
|
||||
mov al, bh
|
||||
out dx, al
|
||||
mov al, bl
|
||||
out dx, al
|
||||
jmp EndSetDmaAddress
|
||||
MasterSetDmaAddress:
|
||||
mov al, bh
|
||||
out dx, al
|
||||
call ClrDmaFlipFlop
|
||||
mov al, bl
|
||||
out dx, al
|
||||
EndSetDmaAddress:
|
||||
pop si dx cx bx ax
|
||||
ret
|
||||
|
||||
;Spécifie au controleur DMA le nombre d'octets à transférer dans CX
|
||||
SetDmaCount:
|
||||
push ax bx dx si
|
||||
call ClrDmaFlipFlop
|
||||
mov si, offset DmaCount
|
||||
xor dh, dh
|
||||
xor bh, bh
|
||||
mov bl, al
|
||||
mov dl, byte ptr cs:[si+bx]
|
||||
cmp al, 4
|
||||
jae MasterSetDmaCount
|
||||
mov al, ch
|
||||
out dx, al
|
||||
mov al, cl
|
||||
out dx, al
|
||||
jmp EndSetDmaCount
|
||||
MasterSetDmaCount:
|
||||
mov al, ch
|
||||
out dx, al
|
||||
call ClrDmaFlipFlop
|
||||
mov al, cl
|
||||
out dx, al
|
||||
EndSetDmaCount:
|
||||
pop si dx bx ax
|
||||
ret
|
||||
|
|
@ -0,0 +1,241 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
start:
|
||||
jmp tsr
|
||||
db 'PIC8259A'
|
||||
Tsr:
|
||||
cli
|
||||
cmp ax,1234h
|
||||
jne nomore
|
||||
mov ax,4321h
|
||||
jmp itsok
|
||||
nomore:
|
||||
push bx
|
||||
mov bl,ah
|
||||
xor bh,bh
|
||||
shl bx,1
|
||||
mov bx,cs:[bx].tables
|
||||
mov cs:current,bx
|
||||
pop bx
|
||||
call cs:current
|
||||
itsok:
|
||||
jnc noerror
|
||||
push bp
|
||||
mov bp,sp
|
||||
or byte ptr [bp+6],1b
|
||||
pop bp
|
||||
mov ax,cs
|
||||
shl eax,16
|
||||
mov ax,cs:current
|
||||
jmp endofint
|
||||
noerror:
|
||||
push bp
|
||||
mov bp,sp
|
||||
and byte ptr [bp+6],0FEh
|
||||
pop bp
|
||||
endofint:
|
||||
sti
|
||||
iret
|
||||
current dw 0
|
||||
tables dw enableirq
|
||||
dw disableirq
|
||||
dw readmaskirq
|
||||
dw readirr
|
||||
dw readisr
|
||||
dw installhandler
|
||||
dw replacehandler
|
||||
dw getint
|
||||
dw setint
|
||||
dw seteoi
|
||||
|
||||
;Adresses de port du contr“leur IRQ
|
||||
MASTERPIC = 020h ;Adresse de base du PIC maŒtre
|
||||
SLAVEPIC = 0A0h ;Adresse de base du PIC esclave
|
||||
IRQMASK = 001h ;Offset sur port de masquage
|
||||
|
||||
;Commandes IRQ OCW2
|
||||
DISABLEROTATION = 000h ;Desactiver la rotation de priorités en mode EOI automatique
|
||||
EOI = 020h ;End of Interrupt non sp‚cifi‚
|
||||
COMMANDEOI = 060h ;Commande EOI particulière
|
||||
ENABLEROTATION = 080h ;Activer la rotation de priorités en mode EOI automatique
|
||||
ROTATIONNOSPEC = 0A0h ;Rotation des priorités en mode EOI automatique
|
||||
SETPRIORITY = 0C0h ;Definir la priorité
|
||||
ROTATIONSPEC = 0E0h ;Rotation des priorités en mode EOI spécifié
|
||||
|
||||
;Position des vecteurs d'interruptions
|
||||
MASTERFIRSTVECTOR = 008h ;Vecteurs logiciels des interruptions
|
||||
SLAVEFIRSTVECTOR = 070h ;‚lectroniques
|
||||
|
||||
;OCW3 codes registres
|
||||
IRR = 002h ;Interrupt Request Register
|
||||
ISR = 003h ;In Service Register
|
||||
;OCW3 et modes
|
||||
OCW3 = 008h ;OCW3
|
||||
POLLING = 004h ;Polling bit
|
||||
|
||||
|
||||
ISR = 0Bh ; Pas d'op‚ration, pas de Poll, lire ISR OCW3
|
||||
IRR = 0Ah ; Pas d'op‚ration, pas de Poll, lire IRR
|
||||
|
||||
|
||||
;Autorise une interruption ‚lectronique
|
||||
;Entr‚e : AL - Num‚ro de l'interruption (0-15) … autoriser 0-7 = MASTERPIC , 8-15 = SLAVEPIC
|
||||
EnableIRQ:
|
||||
push ax cx dx
|
||||
mov dx,MASTERPIC+IRQMASK
|
||||
cmp al,7
|
||||
jbe master
|
||||
mov dx,SLAVEPIC+IRQMASK
|
||||
master:
|
||||
mov cl,al
|
||||
and cl,7
|
||||
mov al,1
|
||||
shl al,cl
|
||||
not al
|
||||
mov ah,al
|
||||
in al,dx
|
||||
and al,ah
|
||||
out dx,al
|
||||
pop dx cx ax
|
||||
ret
|
||||
|
||||
;Desactive une interruption ‚lectronique
|
||||
;Entr‚e : AL - Num‚ro de l'interruption (0-15) … desactiver 0-7 = MASTERPIC , 8-15 = SLAVEPIC
|
||||
DisableIRQ:
|
||||
push ax cx dx
|
||||
mov dx,MASTERPIC+IRQMASK
|
||||
cmp al,7
|
||||
jbe master2
|
||||
mov dx,SLAVEPIC+IRQMASK
|
||||
master2:
|
||||
mov cl,al
|
||||
and cl,7
|
||||
mov al,1
|
||||
shl al,cl
|
||||
mov ah,al
|
||||
in al,dx
|
||||
or al,ah
|
||||
out dx,al
|
||||
pop dx cx ax
|
||||
ret
|
||||
|
||||
;Signale "End Of Interrupt" de l'interruption al
|
||||
SetEOI:
|
||||
push ax dx
|
||||
cmp al,7
|
||||
jbe master3
|
||||
mov al,EOI
|
||||
out SLAVEPIC,al
|
||||
master3:
|
||||
mov al,EOI
|
||||
out MASTERPIC,al
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
;Lit les masques d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
|
||||
ReadmaskIrq:
|
||||
push dx
|
||||
mov dx,MASTERPIC+ IRQMASK
|
||||
cmp bh,0
|
||||
jne Master5
|
||||
mov dx,SLAVEPIC+ IRQMASK
|
||||
master5:
|
||||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
|
||||
;Lit le registre d'‚tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
|
||||
ReadISR:
|
||||
push dx
|
||||
mov dx,MASTERPIC
|
||||
cmp bh,0
|
||||
jne Master6
|
||||
mov dx,SLAVEPIC
|
||||
master6:
|
||||
mov al,isr
|
||||
out dx,al
|
||||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
|
||||
;Lit le registre d'‚tat d'un contr“leur IRQ dans al, 0 master ou slave 1 ds bh
|
||||
ReadIRR:
|
||||
push dx
|
||||
mov dx,MASTERPIC
|
||||
cmp bh,0
|
||||
jne Master7
|
||||
mov dx,SLAVEPIC
|
||||
master7:
|
||||
mov al,irr
|
||||
out dx,al
|
||||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
|
||||
;remplace le handler pointer par ds:si en bx:100h interruption ax
|
||||
replacehandler:
|
||||
push ax bx cx si di ds es
|
||||
mov es,bx
|
||||
mov di,0100h
|
||||
mov ah,4
|
||||
int 48h
|
||||
jc reph
|
||||
mov bx,ax
|
||||
call getint
|
||||
mov es:[102h],si
|
||||
mov es:[104h],ds
|
||||
call setint
|
||||
reph:
|
||||
pop es ds di si cx bx ax
|
||||
ret
|
||||
|
||||
;install le handler pointer par ds:si en bx:100h interruption ax
|
||||
installhandler:
|
||||
push bx cx di es
|
||||
mov es,bx
|
||||
mov di,100h
|
||||
mov ah,4
|
||||
int 48h
|
||||
jc inh
|
||||
mov bx,ax
|
||||
call setint
|
||||
inh:
|
||||
pop es di cx bx
|
||||
ret
|
||||
|
||||
;met es:di le handle de l'int al
|
||||
setint:
|
||||
push ax bx ds
|
||||
call disableirq
|
||||
cli
|
||||
xor ah,ah
|
||||
mov bx,ax
|
||||
shl bx,2
|
||||
xor ax,ax
|
||||
mov ds,ax
|
||||
mov ds:[bx],di
|
||||
mov ds:[bx+2],es
|
||||
pop ds bx ax
|
||||
sti
|
||||
call enableirq
|
||||
ret
|
||||
|
||||
;met ds:si le handle de l'int al
|
||||
getint:
|
||||
push ax bx es
|
||||
xor ah,ah
|
||||
mov bx,ax
|
||||
shl bx,2
|
||||
xor ax,ax
|
||||
mov es,ax
|
||||
mov si,es:[bx]
|
||||
mov ds,es:[bx+2]
|
||||
pop es bx ax
|
||||
ret
|
||||
|
||||
|
||||
end start
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
lnk_boot = tlink /x
|
||||
asm= tasm /t/m5/zi
|
||||
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
|
||||
|
||||
boot.bin: boot.asm
|
||||
$(asm) boot
|
||||
$(lnk_boot) boot
|
||||
exe2boot boot.exe boot.bin
|
||||
|
||||
clavier.sys: clavier.asm
|
||||
$(asm) clavier
|
||||
$(lnk) clavier
|
||||
ren clavier.com clavier.sys
|
||||
|
||||
8259a.sys: 8259a.asm
|
||||
$(asm) 8259a
|
||||
$(lnk) 8259a
|
||||
ren 8259a.com 8259a.sys
|
||||
|
||||
disque.sys: disque.asm
|
||||
$(asm) disque
|
||||
$(lnk) disque
|
||||
ren disque.com disque.sys
|
||||
|
||||
heure.sys: heure.asm
|
||||
$(asm) heure
|
||||
$(lnk) heure
|
||||
ren heure.com heure.sys
|
||||
|
||||
horloge.sys: horloge.asm
|
||||
$(asm) horloge
|
||||
$(lnk) horloge
|
||||
ren horloge.com horloge.sys
|
||||
|
||||
manette.sys: manette.asm
|
||||
$(asm) manette
|
||||
$(lnk) manette
|
||||
ren manette.com manette.sys
|
||||
|
||||
port.sys: port.asm
|
||||
$(asm) port
|
||||
$(lnk) port
|
||||
ren port.com port.sys
|
||||
|
||||
souris.sys: souris.asm
|
||||
$(asm) souris
|
||||
$(lnk) souris
|
||||
ren souris.com souris.sys
|
||||
|
||||
systeme.sys: systeme.asm
|
||||
$(asm) systeme
|
||||
$(lnk) systeme
|
||||
ren systeme.com systeme.sys
|
||||
|
||||
video.sys: video.asm
|
||||
$(asm) video
|
||||
$(lnk) video
|
||||
ren video.com video.sys
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.com
|
||||
del *.sys
|
||||
del *.err
|
|
@ -0,0 +1,221 @@
|
|||
boots segment
|
||||
.386
|
||||
org 7C00h
|
||||
;org 100h
|
||||
assume cs:boots,ds:boots
|
||||
|
||||
start:
|
||||
jmp boot
|
||||
|
||||
bootdb db 'COS2000A' ;Fabricant + n°série Formatage
|
||||
sizec dw 512 ;octet/secteur
|
||||
db 1 ;secteur/cluster
|
||||
reserv dw 1 ;secteur reserv‚
|
||||
nbfat db 2 ;nb de copie de la FAT
|
||||
nbfit dw 224 ;taille rep racine
|
||||
allclu dw 2880 ;nb secteur du volume si < 32 még
|
||||
db 0F0h ;Descripteur de média
|
||||
fatsize dw 9 ;secteur/FAT
|
||||
nbtrack dw 18 ;secteur/piste
|
||||
head dw 2 ;nb de tˆteb de lecture/écriture
|
||||
hidden dd 0 ;nombre de secteur cach‚s
|
||||
dd 0 ;si nbsecteur = 0 nbsect ; the number of sectors
|
||||
bootdrv db 0 ;Lecteur de d‚marrage
|
||||
bootsig db 0 ;NA
|
||||
db 29h ;boot signature 29h
|
||||
bootsig2 dd 01020304h ;no de serie
|
||||
pope db 'COS2000 ' ;nom de volume
|
||||
db 'FAT12 ' ;FAT
|
||||
specialboot:
|
||||
|
||||
errorloading db ' Erreur !!',0dh,0ah,0
|
||||
okloading db 'Recherche noyau',0Dh,0ah,' - system.sys',0
|
||||
syst db ' Ok',0dh,0ah,'Chargement',0
|
||||
dot db '.',0
|
||||
Sys db 'SYSTEME SYS'
|
||||
|
||||
errorboot:
|
||||
mov si,offset errorloading
|
||||
call showstr
|
||||
mov ah,0
|
||||
int 16h
|
||||
int 19h
|
||||
boot:
|
||||
mov Bootdrv,dl
|
||||
cli
|
||||
mov ax,09000h
|
||||
mov ss,ax
|
||||
mov sp,0FFFFh
|
||||
sti
|
||||
|
||||
boot2:
|
||||
push cs
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
xor ax,ax
|
||||
int 13h
|
||||
jc errorboot
|
||||
mov si,offset okloading
|
||||
call showstr
|
||||
mov cx,Reserv
|
||||
add cx,word ptr [offset Hidden]
|
||||
adc cx,word ptr [offset Hidden+2]
|
||||
push cx
|
||||
mov bx,fatsize
|
||||
mov di,offset bufferfat
|
||||
readfat:
|
||||
call readsector
|
||||
inc cx
|
||||
add di,sizec
|
||||
dec bx
|
||||
jnz readfat
|
||||
pop cx
|
||||
xor ax,ax
|
||||
mov al,NbFat
|
||||
mov bx,FatSize
|
||||
mul bx
|
||||
add cx,ax
|
||||
mov ax,32
|
||||
mul nbfit
|
||||
div sizec
|
||||
add ax,cx
|
||||
sub ax,2
|
||||
mov word ptr [offset bootsig],ax
|
||||
xor dx,dx
|
||||
CheckRoot:
|
||||
mov di,offset buffer
|
||||
call readsector
|
||||
jc errorboot
|
||||
xor bx,bx
|
||||
findnext:
|
||||
cmp byte ptr [di],0
|
||||
je errorboot
|
||||
cmp byte ptr [di],0E5h
|
||||
je no
|
||||
cmp byte ptr [di],041h
|
||||
je no
|
||||
mov si,offset dot
|
||||
call showstr
|
||||
push di cx
|
||||
mov si,offset sys
|
||||
mov cx,11
|
||||
rep cmpsb
|
||||
pop cx di
|
||||
je oksystem
|
||||
no:
|
||||
add di,32
|
||||
add bx,32
|
||||
inc dx
|
||||
cmp dx,nbfit
|
||||
ja errorboot
|
||||
cmp bx,sizec
|
||||
jb findnext
|
||||
inc cx
|
||||
jmp Checkroot
|
||||
oksystem:
|
||||
mov si,offset syst
|
||||
call showstr
|
||||
mov cx,[di+26]
|
||||
mov ax,0900h
|
||||
mov es,ax
|
||||
push es
|
||||
mov di,100h
|
||||
push di
|
||||
mov si,offset dot
|
||||
xor ax,ax
|
||||
fatagain:
|
||||
cmp cx,0FF0h
|
||||
jae finishload
|
||||
push cx
|
||||
add cx,word ptr [offset bootsig]
|
||||
call readsector
|
||||
pop cx
|
||||
jc errorboot
|
||||
inc ax
|
||||
call showstr
|
||||
add di,sizec
|
||||
call getfat
|
||||
jnc fatagain
|
||||
finishload:
|
||||
db 0CBh
|
||||
|
||||
;=============READSECTOR (Fonction 01H)===============
|
||||
;Lit le secteur CX et le met en es:di
|
||||
;-> AH=1
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
ReadSector:
|
||||
push ax bx cx dx si
|
||||
mov ax,cx
|
||||
xor dx,dx
|
||||
div nbtrack
|
||||
inc dl
|
||||
mov bl,dl
|
||||
xor dx,dx
|
||||
div head
|
||||
mov dh, 0
|
||||
xchg dl,dh
|
||||
mov cx,ax
|
||||
xchg cl,ch
|
||||
shl cl,6
|
||||
or cl, bl
|
||||
mov bx,di
|
||||
mov SI, 4
|
||||
mov AL, 1
|
||||
TryAgain:
|
||||
mov AH, 2
|
||||
int 13h
|
||||
jnc Done
|
||||
dec SI
|
||||
jnz TryAgain
|
||||
Done:
|
||||
pop si dx cx bx ax
|
||||
ret
|
||||
|
||||
getfat:
|
||||
push ax bx dx di
|
||||
mov di,offset bufferfat
|
||||
mov ax,cx
|
||||
mov bx,ax
|
||||
and bx,0000000000000001b
|
||||
shr ax,1
|
||||
mov cx,3
|
||||
mul cx
|
||||
add di,ax
|
||||
cmp bx,0h
|
||||
jnz evenfat
|
||||
oddfat:
|
||||
mov dx,[di]
|
||||
and dx,0FFFh
|
||||
mov cx,dx
|
||||
jmp endfat
|
||||
evenfat:
|
||||
mov dx,[di+1]
|
||||
and dx,0FFF0h
|
||||
shr dx,4
|
||||
mov cx,dx
|
||||
endfat:
|
||||
pop di dx bx ax
|
||||
ret
|
||||
|
||||
showstr:
|
||||
push ax bx si
|
||||
again:
|
||||
lodsb
|
||||
or al,al
|
||||
jz fin
|
||||
mov ah,0Eh
|
||||
mov bx,07h
|
||||
int 10h
|
||||
jmp again
|
||||
fin:
|
||||
pop si bx ax
|
||||
ret
|
||||
|
||||
Buffer equ $
|
||||
BufferFat equ $+2048
|
||||
|
||||
boots ends
|
||||
end start
|
||||
|
|
@ -0,0 +1,218 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
start:
|
||||
|
||||
jmp tsr
|
||||
offsets dd 0
|
||||
db 'KEYBOARD'
|
||||
tsr:
|
||||
pushf
|
||||
db 2eh,0ffh,1eh
|
||||
dw offsets
|
||||
cli
|
||||
mov cs:feax,eax
|
||||
in al,60h
|
||||
cmp cs:isstate,1
|
||||
jne nostate
|
||||
cmp al,57
|
||||
jne endof
|
||||
mov cs:isstate,0
|
||||
jmp endof
|
||||
nostate:
|
||||
cmp al,68
|
||||
je F10
|
||||
cmp al,87
|
||||
je F11
|
||||
cmp al,88
|
||||
je F12
|
||||
endof:
|
||||
mov eax,cs:feax
|
||||
sti
|
||||
iret
|
||||
isstate db 0
|
||||
infos db 40 dup (0)
|
||||
|
||||
F10:
|
||||
mov ax,6000h
|
||||
push ax
|
||||
mov di,0100h
|
||||
push di
|
||||
sti
|
||||
db 0CBh
|
||||
|
||||
F11:
|
||||
push ax di es
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
mov al,cs:[di+7]
|
||||
inc al
|
||||
cmp al,9
|
||||
jbe notabove
|
||||
mov al,0
|
||||
notabove:
|
||||
mov ah,0
|
||||
int 47h
|
||||
pop es di ax
|
||||
jmp endof
|
||||
|
||||
|
||||
f12:
|
||||
mov cs:isstate,1
|
||||
pop word ptr cs:fip
|
||||
pop word ptr cs:fcs
|
||||
pop dword ptr cs:ffl
|
||||
mov cs:fesp,esp
|
||||
push ds es
|
||||
pusha
|
||||
push word ptr cs:fip
|
||||
push gs
|
||||
push fs
|
||||
push ss
|
||||
push es
|
||||
push ds
|
||||
push word ptr cs:fcs
|
||||
push dword ptr cs:fesp
|
||||
push ebp
|
||||
push edi
|
||||
push esi
|
||||
push edx
|
||||
push ecx
|
||||
push ebx
|
||||
push eax
|
||||
push dword ptr cs:ffl
|
||||
push cs
|
||||
push cs
|
||||
pop es
|
||||
pop ds
|
||||
mov ah,26
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,4
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset reg
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset fla
|
||||
int 47h
|
||||
pop edx
|
||||
mov cx,32
|
||||
mov ah,11
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov si,offset regs
|
||||
mov bx,8+7
|
||||
mov ah,21
|
||||
mov cl,6
|
||||
int 47h
|
||||
showallREG:
|
||||
mov ah,6
|
||||
int 47h
|
||||
cmp bx,8
|
||||
jb nodr
|
||||
pop edx
|
||||
mov cx,32
|
||||
jmp popo
|
||||
nodr:
|
||||
mov ah,21
|
||||
mov cl,1
|
||||
int 47h
|
||||
xor edx,edx
|
||||
pop dx
|
||||
mov cx,16
|
||||
popo:
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
push si
|
||||
mov si,offset gr
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,8
|
||||
int 47h
|
||||
mov si,offset dr
|
||||
mov ah,13
|
||||
int 47h
|
||||
pop si
|
||||
add si,5
|
||||
dec bx
|
||||
jnz showallreg
|
||||
mov ah,34
|
||||
mov di,offset infos
|
||||
int 47h
|
||||
mov ah,25
|
||||
mov bl,cs:infos
|
||||
xor bh,bh
|
||||
dec bl
|
||||
int 47h
|
||||
mov si,offset app
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ah,32
|
||||
mov bl,cs:infos
|
||||
xor bh,bh
|
||||
mov di,ax
|
||||
dec di
|
||||
mov cl,116
|
||||
int 47h
|
||||
pop es ds
|
||||
sti
|
||||
waitt:
|
||||
cmp cs:isstate,0
|
||||
jne waitt
|
||||
mov ah,27
|
||||
int 47h
|
||||
popa
|
||||
pop es ds
|
||||
push dword ptr cs:ffl
|
||||
push word ptr cs:fcs
|
||||
push word ptr cs:fip
|
||||
jmp endof
|
||||
|
||||
reg db ' Etats des registres',0
|
||||
fla db 'Eflags:',0
|
||||
regs db 'EAX:',0
|
||||
db 'EBX:',0
|
||||
db 'ECX:',0
|
||||
db 'EDX:',0
|
||||
db 'ESI:',0
|
||||
db 'EDI:',0
|
||||
db 'EBP:',0
|
||||
db 'ESP:',0
|
||||
db ' CS:',0
|
||||
db ' DS:',0
|
||||
db ' ES:',0
|
||||
db ' FS:',0
|
||||
db ' GS:',0
|
||||
db ' SS:',0
|
||||
db ' IP:',0
|
||||
gr db '(',0
|
||||
dr db ')',0
|
||||
app db 'Appuyez sur espace pour quitter...',0
|
||||
ffl dd 0
|
||||
fcs dw 0
|
||||
fip dw 0
|
||||
fesp dd 0
|
||||
feax dd 0
|
||||
end start
|
|
@ -0,0 +1,964 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
include ..\include\fat.h
|
||||
|
||||
start:
|
||||
jmp tsr ;Saute à la routine résidente
|
||||
names db 'DRIVE' ;Nom drivers
|
||||
id dw 1234h ;Identifiant drivers
|
||||
Tsr:
|
||||
cli ;Désactive interruptions logiciellement
|
||||
cmp ax,cs:ID ;Compare si test de chargement
|
||||
jne nomore ;Si pas test alors on continu
|
||||
rol ax,3*4 ;Rotation de 3 chiffre de l'ID pour montrer que le drivers est chargé
|
||||
jmp itsok ;On termine l'int avec notre code d'ID preuve du bon chargement de VIDEO
|
||||
nomore:
|
||||
cmp ah,maxfunc
|
||||
jbe noerrorint
|
||||
stc
|
||||
jmp itsok
|
||||
noerrorint:
|
||||
clc
|
||||
push bx
|
||||
mov bl,ah ;On calcule d'aprés le n° de fonction
|
||||
xor bh,bh ;quel sera l'entrée dans la table indexée
|
||||
shl bx,1 ;des adresses fonctions.
|
||||
mov bx,cs:[bx+tables] ;On récupère cette adresse depuis la table
|
||||
mov cs:current,bx ;On la stocke temporairement pour obtenir les registres d'origine
|
||||
pop bx
|
||||
clc
|
||||
call cs:current ;Puis on execute la fonction
|
||||
itsok:
|
||||
push bp
|
||||
mov bp,sp ;On prend sp dans bp pour adresser la pile
|
||||
jnc noerror ;La fonction appelée a renvoyer une erreur : Flag CARRY ?
|
||||
or byte ptr [bp+6],1b;Si oui on le retranscrit sur le registre FLAG qui sera dépilé lors du IRET
|
||||
;xor eax,eax
|
||||
;mov ax,cs ;On récupère le segment et l'offset puis en renvoie l'adresse physique
|
||||
;shl eax,4 ;de l'erreur.
|
||||
;add ax,cs:current
|
||||
jmp endofint ;on termine l'int
|
||||
noerror:
|
||||
and byte ptr [bp+6],0FEh;Si pas d'erreur on efface le Bit CARRY du FLAG qui sera dépilé lors du IRET
|
||||
endofint:
|
||||
pop bp
|
||||
sti ;On réactive les interruptions logiciellement
|
||||
iret ;Puis on retourne au programme appelant.
|
||||
|
||||
current dw 0 ;Mot temporaire qui contient l'adresse de la fonction appelée
|
||||
tables dw readsector
|
||||
dw writesector
|
||||
dw verifysector2
|
||||
dw initdrive
|
||||
dw loadfile
|
||||
dw compressrle
|
||||
dw decompressrle
|
||||
dw FindFirstfile
|
||||
dw Findnextfile
|
||||
dw GetFreeSpace
|
||||
dw Searchfile
|
||||
dw Getname
|
||||
dw Getserial
|
||||
dw changedir
|
||||
dw readcluster
|
||||
dw writecluster
|
||||
dw getdir
|
||||
|
||||
maxfunc equ 24
|
||||
|
||||
;DPT disquette
|
||||
mydpt DPT ?
|
||||
|
||||
;Secteur de boot
|
||||
myboot bootSector ?
|
||||
|
||||
;Données Calculée
|
||||
clustersize dw 0
|
||||
TracksPerHead dw 0
|
||||
DriveSize dd 0
|
||||
AdressBoot dw 0
|
||||
AdressFat dw 0
|
||||
AdressParent dw 0
|
||||
AdressData dw 0
|
||||
AddingValue dw 0
|
||||
CurrentDir dw 0 ;En cluster
|
||||
CurrentDirStr db 128 dup (0)
|
||||
|
||||
;Pour recherches
|
||||
EntryPlace dw 0 ;En octet
|
||||
AdressDirectory dw 0 ;En cluster
|
||||
firstsearch dw 1 ;Premiere requete ?
|
||||
|
||||
getfat:
|
||||
push ax bx dx si
|
||||
mov ax,cx
|
||||
mov bx,ax
|
||||
and bx,0000000000000001b
|
||||
shr ax,1
|
||||
mov cx,3
|
||||
mul cx
|
||||
mov si,offset bufferfat
|
||||
add si,ax
|
||||
cmp bx,0h
|
||||
jnz evenfat
|
||||
oddfat:
|
||||
mov dx,cs:[si]
|
||||
and dx,0FFFh
|
||||
mov cx,dx
|
||||
jmp endfat
|
||||
evenfat:
|
||||
mov dx,cs:[si+1]
|
||||
and dx,0FFF0h
|
||||
shr dx,4
|
||||
mov cx,dx
|
||||
endfat:
|
||||
cmp dx,0FF0h
|
||||
jbe nocarry
|
||||
stc
|
||||
pop si dx bx ax
|
||||
ret
|
||||
nocarry:
|
||||
clc
|
||||
pop si dx bx ax
|
||||
ret
|
||||
|
||||
;============loadfile (Fonction 4)===============
|
||||
;Charge le fichier ds:si en es:di ->ecx taille
|
||||
;-> AH=4
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
loadfile:
|
||||
push eax bx di
|
||||
push es di
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset tempfit
|
||||
call searchfile
|
||||
pop di es
|
||||
jne errorload
|
||||
jc errorload
|
||||
mov cx,cs:tempfit.FileGroup
|
||||
mov eax,cs:tempfit.FileSize
|
||||
call loadway
|
||||
jc errorload
|
||||
clc
|
||||
mov ecx,eax
|
||||
pop di bx eax
|
||||
ret
|
||||
errorload:
|
||||
stc
|
||||
mov ecx,0
|
||||
pop di bx eax
|
||||
ret
|
||||
|
||||
tempfit db 32 dup (0)
|
||||
|
||||
;=============SearchFile (Fonction 10)===============
|
||||
;Renvois dans ES:DI la fit du fichier DS:SI et non equal si pas existant
|
||||
;-> AH=10
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
SearchFile:
|
||||
push ax cx ds si di es
|
||||
call uppercase
|
||||
push ds si
|
||||
call findfirstfilez
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
pop si ds
|
||||
jc errorsearch
|
||||
jmp founded
|
||||
nextsearch:
|
||||
push ds si
|
||||
call findnextfilez
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
pop si ds
|
||||
founded:
|
||||
cmp byte ptr cs:[di],0
|
||||
je notgood
|
||||
cmp byte ptr cs:[di+FileAttr],0Fh
|
||||
je nextsearch
|
||||
call cmpnames
|
||||
jc nextsearch
|
||||
okfound:
|
||||
push cs
|
||||
pop ds
|
||||
mov si,di
|
||||
pop es di
|
||||
push di es
|
||||
mov cx,32
|
||||
rep movsb
|
||||
clc
|
||||
pop es di si ds cx ax
|
||||
ret
|
||||
notgood:
|
||||
cmp si,0FF5h
|
||||
pop es di si ds cx ax
|
||||
ret
|
||||
errorsearch:
|
||||
stc
|
||||
pop es di si ds cx ax
|
||||
ret
|
||||
|
||||
;Transforme la chaine ds:si en maj
|
||||
uppercase:
|
||||
push si ax
|
||||
mov di,si
|
||||
uppercaser:
|
||||
mov al,ds:[si]
|
||||
cmp al,0
|
||||
je enduppercase
|
||||
cmp al,'a'
|
||||
jb nonmaj
|
||||
cmp al,'z'
|
||||
ja nonmaj
|
||||
sub al,'a'-'A'
|
||||
mov ds:[si],al
|
||||
nonmaj:
|
||||
inc si
|
||||
jmp uppercaser
|
||||
enduppercase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
;Compare le nom ds:si '.' avec es:di
|
||||
CmpNames:
|
||||
push ax cx si di
|
||||
mov cx,8
|
||||
repe cmpsb
|
||||
jne nequal
|
||||
inc si
|
||||
nequal:
|
||||
cmp byte ptr [si-1],'.'
|
||||
jne trynoext
|
||||
mov al,' '
|
||||
rep scasb
|
||||
mov cx,3
|
||||
rep cmpsb
|
||||
jne notequal
|
||||
cmp byte ptr [si],0
|
||||
jne notequal
|
||||
cmp cx,0
|
||||
jl notequal
|
||||
itok:
|
||||
pop di si cx ax
|
||||
ret
|
||||
trynoext:
|
||||
cmp byte ptr [si-1],0
|
||||
jne notequal
|
||||
jmp itok
|
||||
notequal:
|
||||
stc
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;charge le fichier de de groupe CX et de taille eax
|
||||
LoadWay:
|
||||
push eax bx dx si di ecx ds es
|
||||
cmp eax,0
|
||||
je Zeroload
|
||||
rol eax,16
|
||||
mov dx,ax
|
||||
ror eax,16
|
||||
div cs:clusterSize
|
||||
mov bx,ax
|
||||
cmp bx,1
|
||||
jb adjustlast
|
||||
Loadfat:
|
||||
call readcluster
|
||||
jc noway
|
||||
add di,cs:clusterSize
|
||||
call getfat
|
||||
dec bx
|
||||
jnz loadfat
|
||||
AdjustLast:
|
||||
push es di
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset bufferread
|
||||
mov si,di
|
||||
call Readcluster
|
||||
pop di es
|
||||
jc noway
|
||||
mov cx,dx
|
||||
push cs
|
||||
pop ds
|
||||
rep movsb
|
||||
zeroload:
|
||||
clc
|
||||
pop es ds ecx di si dx bx eax
|
||||
ret
|
||||
noway:
|
||||
stc
|
||||
pop es ds ebp di si dx bx eax
|
||||
ret
|
||||
|
||||
;=============INITDRIVE (Fonction 04H)===============
|
||||
;Initialise le lecteur pour une utilisation ultérieure
|
||||
;-> AH=4
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
InitDrive:
|
||||
push eax bx cx edx di ds es
|
||||
push cs
|
||||
pop ds
|
||||
push cs
|
||||
pop es
|
||||
mov di,3
|
||||
againtry:
|
||||
xor ax,ax
|
||||
mov dx,0000h
|
||||
int 13h
|
||||
mov bx,offset myboot
|
||||
mov ax,0201h
|
||||
mov cx,0001h
|
||||
mov dx,0000h
|
||||
int 13h
|
||||
jnc oknoagaintry
|
||||
dec di
|
||||
jnz againtry
|
||||
oknoagaintry:
|
||||
mov cs:lastseg,0
|
||||
mov cs:lastoff,0
|
||||
mov cs:LastRead,0
|
||||
mov ax,myboot.sectorsize
|
||||
mov bl,myboot.SectorsPerCluster
|
||||
xor bh,bh
|
||||
mul bx
|
||||
mov clustersize,ax
|
||||
mov bx,myboot.HiddenSectorsL
|
||||
adc bx,myboot.HiddenSectorsH
|
||||
mov AdressBoot,bx
|
||||
add bx,myboot.ReservedSectors
|
||||
mov AdressFat,bx
|
||||
xor ax,ax
|
||||
mov al,myboot.FatsPerDrive
|
||||
mul myboot.SectorsPerFat
|
||||
add bx,ax
|
||||
mov AdressParent,bx
|
||||
mov AdressDirectory,bx
|
||||
mov ax,32
|
||||
mul myboot.DirectorySize
|
||||
div myboot.SectorSize
|
||||
add bx,ax
|
||||
mov AdressData,bx
|
||||
sub bx,2
|
||||
mov AddingValue,bx
|
||||
mov ax,myboot.SectorsPerDrive
|
||||
div myboot.SectorsPerTrack
|
||||
xor dx,dx
|
||||
div myboot.HeadsPerDrive
|
||||
mov TracksPerHead,ax
|
||||
xor eax,eax
|
||||
mov ax,myboot.SectorsPerDrive
|
||||
sub ax,AdressData
|
||||
mul myboot.SectorSize
|
||||
shl edx,16
|
||||
add edx,eax
|
||||
mov DriveSize,edx
|
||||
mov CurrentDir,0
|
||||
mov EntryPlace,0
|
||||
mov adressdirectory,0
|
||||
mov firstsearch,1
|
||||
mov currentdirstr,0
|
||||
mov di,offset bufferfat
|
||||
mov dx,myboot.SectorsPerFat
|
||||
mov cx,AdressFat
|
||||
SeeFat:
|
||||
call readsector
|
||||
jc ErrorInit
|
||||
add di,myboot.SectorSize
|
||||
inc cx
|
||||
dec dx
|
||||
jnz seefat
|
||||
clc
|
||||
pop es ds di edx cx bx eax
|
||||
ret
|
||||
ErrorInit:
|
||||
stc
|
||||
pop es ds di edx cx bx eax
|
||||
ret
|
||||
|
||||
;=============FindFirstFile (Fonction 7)==============
|
||||
;Renvois dans ES:DI un bloc d'info
|
||||
;-> AH=7
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
FindFirstFile:
|
||||
push cx ds di si
|
||||
call FindFirstFileZ
|
||||
mov cx,32
|
||||
rep movsb
|
||||
pop si di ds cx
|
||||
ret
|
||||
|
||||
FindFirstFileZ:
|
||||
push cx
|
||||
mov cx,cs:CurrentDir
|
||||
mov cs:AdressDirectory,cx
|
||||
xor cx,cx
|
||||
mov cs:EntryPlace,cx
|
||||
mov cs:firstsearch,1
|
||||
call findnextfileZ
|
||||
pop cx
|
||||
ret
|
||||
|
||||
;=============FindnextFile (Fonction 8)==============
|
||||
;Renvois dans ES:DI un bloc d'info
|
||||
;-> AH=8
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
;Renvois dans ES:DI un bloc d'info
|
||||
FindnextFile:
|
||||
push cx ds di si
|
||||
call FindnextFileZ
|
||||
mov cx,32
|
||||
rep movsb
|
||||
pop si di ds cx
|
||||
ret
|
||||
|
||||
;fait pointer ds:si sur la prochaine entrée du repertoire courant
|
||||
FindnextFileZ:
|
||||
push ax bx cx es di
|
||||
push cs
|
||||
pop ds
|
||||
mov cx,cs:AdressDirectory
|
||||
mov bx,cs:Entryplace
|
||||
FindnextFileagain:
|
||||
cmp cs:firstsearch,1
|
||||
je first
|
||||
add bx,32
|
||||
cmp bx,cs:clusterSize
|
||||
jb nopop
|
||||
first:
|
||||
mov di,offset bufferentry
|
||||
push cs
|
||||
pop es
|
||||
mov bx,0
|
||||
cmp cs:currentdir,0
|
||||
jne notrootdir
|
||||
cmp cs:firstsearch,1
|
||||
je noaddfirst1
|
||||
inc cx
|
||||
noaddfirst1:
|
||||
add cx,cs:adressparent
|
||||
mov al,myboot.sectorspercluster
|
||||
readroot:
|
||||
call readsector
|
||||
jc notwell
|
||||
add di,myboot.sectorsize
|
||||
dec al
|
||||
jnz readroot
|
||||
sub cx,cs:adressparent
|
||||
jmp nopop
|
||||
notrootdir:
|
||||
cmp cs:firstsearch,1
|
||||
je noaddfirst2
|
||||
call getfat
|
||||
noaddfirst2:
|
||||
jc notwell
|
||||
call readcluster
|
||||
jc notwell
|
||||
nopop:
|
||||
mov cs:firstsearch,0
|
||||
mov si,offset bufferentry
|
||||
add si,bx
|
||||
cmp byte ptr cs:[si],0
|
||||
je notwell
|
||||
mov cs:entryplace,bx
|
||||
mov cs:AdressDirectory,cx
|
||||
cmp byte ptr cs:[si],0E5h
|
||||
je findnextfileagain
|
||||
cmp byte ptr cs:[si+fileattr],28h
|
||||
je findnextfileagain
|
||||
cmp byte ptr cs:[si+fileattr],0Fh
|
||||
je findnextfileagain
|
||||
clc
|
||||
pop di es cx bx ax
|
||||
ret
|
||||
notwell:
|
||||
stc
|
||||
pop di es cx bx ax
|
||||
ret
|
||||
|
||||
;=============GetFreeSpace (Fonction 09H)===============
|
||||
;Renvoie en EDX l'espace disque libre du volume
|
||||
;-> AH=9
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
GetFreeSpace:
|
||||
push eax
|
||||
xor eax,eax
|
||||
call getsector
|
||||
mul cs:myboot.SectorSize
|
||||
shl edx,16
|
||||
add edx,eax
|
||||
pop eax
|
||||
ret
|
||||
|
||||
;ax=défectueux bx=libre
|
||||
GetSector:
|
||||
push cx dx
|
||||
mov dx,cs:myboot.SectorsPerDrive
|
||||
sub dx,cs:AddingValue
|
||||
xor ax,ax
|
||||
xor bx,bx
|
||||
mov cx,0
|
||||
goget:
|
||||
push cx
|
||||
call getfat
|
||||
cmp cx,0FF7h
|
||||
jne notdefect
|
||||
inc bx
|
||||
notdefect:
|
||||
cmp cx,0
|
||||
jne notfree
|
||||
inc ax
|
||||
notfree:
|
||||
pop cx
|
||||
inc cx
|
||||
dec dx
|
||||
jnz goget
|
||||
pop dx cx
|
||||
ret
|
||||
errorfree:
|
||||
stc
|
||||
pop dx cx
|
||||
ret
|
||||
|
||||
|
||||
;=============READCLUSTER (Fonction 14)===============
|
||||
;Lit le secteur CX et le met en es:di
|
||||
;-> AH=14
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
readcluster:
|
||||
push ax bx cx dx di
|
||||
mov ax,cx
|
||||
mov bl,cs:myboot.sectorspercluster
|
||||
xor bh,bh
|
||||
mul bx
|
||||
mov cx,ax
|
||||
add cx,cs:addingvalue
|
||||
readsectors:
|
||||
call readsector
|
||||
jc errorreadincluster
|
||||
add di,cs:myboot.sectorsize
|
||||
inc cx
|
||||
dec bl
|
||||
jnz readsectors
|
||||
clc
|
||||
pop di dx cx bx ax
|
||||
ret
|
||||
errorreadincluster:
|
||||
stc
|
||||
pop di dx cx bx ax
|
||||
ret
|
||||
|
||||
;=============WRITECLUSTER (Fonction 15)===============
|
||||
;Ecrit le cluster CX et le met en es:di
|
||||
;-> AH=14
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
writecluster:
|
||||
push ax bx cx dx si
|
||||
mov ax,cx
|
||||
mov bl,cs:myboot.sectorspercluster
|
||||
xor bh,bh
|
||||
mul cx
|
||||
mov cx,ax
|
||||
add cx,cs:addingvalue
|
||||
writesectors:
|
||||
call writesector
|
||||
jc errorwriteincluster
|
||||
add si,cs:myboot.sectorsize
|
||||
inc cx
|
||||
dec bx
|
||||
jnz writesectors
|
||||
clc
|
||||
pop si dx cx bx ax
|
||||
ret
|
||||
errorwriteincluster:
|
||||
stc
|
||||
pop si dx cx bx ax
|
||||
ret
|
||||
|
||||
;=============READSECTOR (Fonction 01H)===============
|
||||
;Lit le secteur CX et le met en es:di
|
||||
;-> AH=1
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
ReadSector:
|
||||
push ax bx cx dx si
|
||||
cmp cx,cs:lastread
|
||||
jne gom
|
||||
mov ax,es
|
||||
cmp cs:lastseg,ax
|
||||
jne gom
|
||||
cmp di,cs:lastoff
|
||||
jne gom
|
||||
jmp done
|
||||
gom:
|
||||
mov cs:lastseg,ax
|
||||
mov cs:lastoff,di
|
||||
mov cs:LastRead,cx
|
||||
mov ax,cx
|
||||
xor dx,dx
|
||||
div cs:myboot.SectorsPerTrack
|
||||
inc dl
|
||||
mov bl,dl
|
||||
xor dx,dx
|
||||
div cs:myboot.HeadsPerDrive
|
||||
mov dh,cs:myboot.bootdrive
|
||||
xchg dl,dh
|
||||
mov cx,ax
|
||||
xchg cl,ch
|
||||
shl cl,6
|
||||
or cl,bl
|
||||
mov bx,di
|
||||
mov SI,4
|
||||
mov AL,1
|
||||
TryAgain:
|
||||
mov AH, 2
|
||||
int 13h
|
||||
jnc Done
|
||||
dec SI
|
||||
jnz TryAgain
|
||||
Done:
|
||||
pop si dx cx bx ax
|
||||
ret
|
||||
|
||||
lastread dw 0
|
||||
lastseg dw 0
|
||||
lastoff dw 0
|
||||
|
||||
;=============WRITESECTOR (Fonction 02H)==============
|
||||
;Ecrit le secteur CX pointé par ds:si
|
||||
;-> AH=2
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
WriteSector:
|
||||
push ax bx cx dx si es
|
||||
cmp cs:Lastread,cx
|
||||
jne nodestruct
|
||||
mov cs:Lastread,0ffffh
|
||||
nodestruct:
|
||||
push ds
|
||||
pop es
|
||||
mov ax,cx
|
||||
xor dx,dx
|
||||
div cs:myboot.SectorsPerTrack
|
||||
inc dl
|
||||
mov bl,dl
|
||||
xor dx,dx
|
||||
div cs:myboot.HeadsPerDrive
|
||||
mov dh,cs:myboot.BootDrive
|
||||
xchg dl,dh
|
||||
mov cx,ax
|
||||
xchg cl,ch
|
||||
shl cl,6
|
||||
or cl, bl
|
||||
mov bx,si
|
||||
mov SI, 4
|
||||
mov AL,1
|
||||
TryAgains:
|
||||
mov AH, 3
|
||||
int 13h
|
||||
jnc Dones
|
||||
dec SI
|
||||
jnz TryAgains
|
||||
Dones:
|
||||
pop es si dx cx bx ax
|
||||
ret
|
||||
|
||||
;=============Getname (Fonction 11)==============
|
||||
;Renvoie le nom en ES:DI
|
||||
;-> AH=11
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
getname:
|
||||
push ax cx dx si di ds es
|
||||
push cs
|
||||
pop ds
|
||||
mov dx,di
|
||||
mov si,offset myboot.DriveName
|
||||
mov cx,11
|
||||
rep movsb
|
||||
mov al,' '
|
||||
mov di,dx
|
||||
mov cx,11
|
||||
repne scasb
|
||||
mov byte ptr es:[di],0
|
||||
pop es ds di si dx cx ax
|
||||
ret
|
||||
|
||||
;=============Getserial (Fonction 12)==============
|
||||
;Renvoie le numéro de serie en EDX
|
||||
;-> AH=12
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
getserial:
|
||||
mov edx,cs:myboot.serialnumber
|
||||
ret
|
||||
|
||||
;=============VERIFYSECTOR (Fonction 03H)==============
|
||||
;Vérifie le secteur CX
|
||||
;-> AH=3
|
||||
;<- Flag Carry si erreur, Flag Equal si secteurs égaux
|
||||
;=====================================================
|
||||
VerifySector:
|
||||
push bx cx si di ds es
|
||||
push cs
|
||||
pop es
|
||||
push cs
|
||||
pop ds
|
||||
mov bx,offset bufferread
|
||||
call ReadSector
|
||||
jc errorverify
|
||||
call inverse
|
||||
call WriteSector
|
||||
jc errorverify
|
||||
mov bx,offset bufferwrite
|
||||
call ReadSector
|
||||
call inverse
|
||||
jc errorverify
|
||||
mov bx,offset bufferread
|
||||
call inverse
|
||||
call WriteSector
|
||||
jc errorverify
|
||||
mov cx,cs:myboot.SectorSize
|
||||
shr cx,2
|
||||
mov si,offset bufferread
|
||||
mov di,offset bufferwrite
|
||||
cld
|
||||
rep cmpsd
|
||||
errorverify:
|
||||
pop es ds di si cx bx
|
||||
ret
|
||||
|
||||
Inverse:
|
||||
mov si,cs:myboot.sectorsize
|
||||
shr si,2
|
||||
invert:
|
||||
shl si,2
|
||||
not dword ptr [bx+si-4]
|
||||
shr si,2
|
||||
dec si
|
||||
jnz invert
|
||||
ret
|
||||
|
||||
VerifySector2:
|
||||
call verifysector
|
||||
jne nook
|
||||
or byte ptr [bp+6],10b
|
||||
nook:
|
||||
ret
|
||||
|
||||
;=============DecompressRle (Fonction 05H)==============
|
||||
;decompress ds:si en es:di taille bp d‚compress‚ cx compress‚
|
||||
;-> AH=5
|
||||
;<- Flag Carry si erreur, Flag Equal si secteurs égaux
|
||||
;=====================================================
|
||||
DecompressRle:
|
||||
push cx dx si di
|
||||
mov dx,cx
|
||||
mov bp,di
|
||||
decompression:
|
||||
mov eax,[si]
|
||||
cmp al,'/'
|
||||
jne nocomp
|
||||
cmp si,07FFFh-6
|
||||
jae thenen
|
||||
mov ecx,eax
|
||||
ror ecx,16
|
||||
cmp cl,'*'
|
||||
jne nocomp
|
||||
cmp byte ptr [si+4],'/'
|
||||
jne nocomp
|
||||
mov al,ch
|
||||
mov cl,ah
|
||||
xor ah,ah
|
||||
xor ch,ch
|
||||
rep stosb
|
||||
add si,5
|
||||
sub dx,5
|
||||
jnz decompression
|
||||
jmp thenen
|
||||
nocomp:
|
||||
mov es:[di],al
|
||||
inc si
|
||||
inc di
|
||||
dec dx
|
||||
jnz decompression
|
||||
thenen:
|
||||
mov ax,dx
|
||||
sub bp,di
|
||||
neg bp
|
||||
clc
|
||||
pop di si dx cx
|
||||
ret
|
||||
|
||||
;=============CompressRle (Fonction 06H)==============
|
||||
;compress ds:si en es:di taille cx d‚compress‚ BP compress‚
|
||||
;-> AH=6
|
||||
;<- Flag Carry si erreur, Flag Equal si secteurs égaux
|
||||
;=====================================================
|
||||
CompressRle:
|
||||
push ax bx cx dx si di ds es
|
||||
mov bp,di
|
||||
xchg si,di
|
||||
push es
|
||||
push ds
|
||||
pop es
|
||||
pop ds
|
||||
mov dx,cx
|
||||
;mov bp,cx
|
||||
againcomp:
|
||||
mov bx,di
|
||||
mov al,es:[di]
|
||||
mov cx,dx
|
||||
cmp ch,0
|
||||
je poo
|
||||
mov cl,0ffh
|
||||
;mov cx,bp
|
||||
;sub cx,di
|
||||
;mov ah,cl
|
||||
poo:
|
||||
mov ah,cl
|
||||
inc di
|
||||
xor ch,ch
|
||||
repe scasb
|
||||
sub cl,ah
|
||||
neg cl
|
||||
cmp cl,6
|
||||
jbe nocomp2
|
||||
mov dword ptr [si],' * /'
|
||||
mov byte ptr [si+4],'/'
|
||||
mov [si+1],cl
|
||||
mov [si+3],al
|
||||
add si,5
|
||||
dec di
|
||||
xor ch,ch
|
||||
sub dx,cx
|
||||
jnz againcomp
|
||||
jmp fini
|
||||
nocomp2:
|
||||
mov [si],al
|
||||
inc si
|
||||
inc bx
|
||||
mov di,bx
|
||||
dec dx
|
||||
jnz againcomp
|
||||
fini:
|
||||
sub bp,si
|
||||
neg bp
|
||||
clc
|
||||
pop es ds di si dx cx bx ax
|
||||
ret
|
||||
|
||||
;=============Changedir (Fonction 13)==============
|
||||
;Change le repertoire courant a DS:SI
|
||||
;-> AH=13
|
||||
;<- Flag Carry si erreur, Flag Equal si secteurs égaux
|
||||
;=====================================================
|
||||
Changedir:
|
||||
push ax cx dx si di ds es
|
||||
push cs
|
||||
pop es
|
||||
;cmp [si],005Ch ;'\',0 (root dir)
|
||||
mov di,offset tempdir
|
||||
call searchfile
|
||||
jc noch
|
||||
mov cx,cs:tempdir.Filegroup
|
||||
mov cs:CurrentDir,cx
|
||||
mov cs:EntryPlace,0
|
||||
mov cs:adressdirectory,cx
|
||||
mov cs:firstsearch,1
|
||||
cmp cs:[di],' ..'
|
||||
jne notback
|
||||
cmp cs:[di],' .'
|
||||
je theend
|
||||
mov di,offset currentdirstr
|
||||
mov cx,128
|
||||
mov al,0
|
||||
repne scasb
|
||||
mov al,'\'
|
||||
std
|
||||
repne scasb
|
||||
cld
|
||||
inc di
|
||||
mov byte ptr es:[di],0
|
||||
jmp theend
|
||||
notback:
|
||||
mov di,offset currentdirstr
|
||||
mov cx,128
|
||||
mov al,0
|
||||
repne scasb
|
||||
dec di
|
||||
mov al,'\'
|
||||
stosb
|
||||
mov dx,di
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov cx,128
|
||||
mov al,0
|
||||
repne scasb
|
||||
sub cx,128
|
||||
neg cx
|
||||
push cs
|
||||
pop es
|
||||
mov di,dx
|
||||
rep movsb
|
||||
theend:
|
||||
pop es ds di si dx cx ax
|
||||
clc
|
||||
ret
|
||||
noch:
|
||||
pop es ds di si dx cx ax
|
||||
stc
|
||||
ret
|
||||
|
||||
tempdir db 32 dup (0)
|
||||
|
||||
;=============getdir (Fonction 16)==============
|
||||
;Recupere le repertoire courant a ES:DI
|
||||
;-> AH=16
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
getdir:
|
||||
push ax cx si di ds es
|
||||
push es di
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset currentdirstr
|
||||
mov cx,128
|
||||
mov al,0
|
||||
repne scasb
|
||||
sub cx,128
|
||||
neg cx
|
||||
pop di es
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset currentdirstr
|
||||
rep movsb
|
||||
pop es ds di si cx ax
|
||||
clc
|
||||
ret
|
||||
|
||||
|
||||
bufferread equ $
|
||||
bufferwrite equ $+2048
|
||||
bufferentry equ $+2048+2048
|
||||
bufferFat equ $+2048+2048+2048
|
||||
|
||||
end start
|
|
@ -0,0 +1,911 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
start:
|
||||
jmp tsr ;Saute à la routine résidente
|
||||
names db 'FORMAT' ;Nom drivers
|
||||
id dw 1234h ;Identifiant drivers
|
||||
Tsr:
|
||||
cli ;Désactive interruptions logiciellement
|
||||
cmp ax,cs:ID ;Compare si test de chargement
|
||||
jne nomore ;Si pas test alors on continu
|
||||
rol ax,3*4 ;Rotation de 3 chiffre de l'ID pour montrer que le drivers est chargé
|
||||
jmp itsok ;On termine l'int avec notre code d'ID preuve du bon chargement de VIDEO
|
||||
nomore:
|
||||
cmp ah,maxfunc
|
||||
jbe noerrorint
|
||||
stc
|
||||
jmp itsok
|
||||
noerrorint:
|
||||
clc
|
||||
push bx
|
||||
mov bl,ah ;On calcule d'aprés le n° de fonction
|
||||
xor bh,bh ;quel sera l'entrée dans la table indexée
|
||||
shl bx,1 ;des adresses fonctions.
|
||||
mov bx,cs:[bx+tables] ;On récupère cette adresse depuis la table
|
||||
mov cs:current,bx ;On la stocke temporairement pour obtenir les registres d'origine
|
||||
pop bx
|
||||
clc
|
||||
call cs:current ;Puis on execute la fonction
|
||||
itsok:
|
||||
push bp
|
||||
mov bp,sp ;On prend sp dans bp pour adresser la pile
|
||||
jnc noerror ;La fonction appelée a renvoyer une erreur : Flag CARRY ?
|
||||
or byte ptr [bp+6],1b;Si oui on le retranscrit sur le registre FLAG qui sera dépilé lors du IRET
|
||||
;xor eax,eax
|
||||
;mov ax,cs ;On récupère le segment et l'offset puis en renvoie l'adresse physique
|
||||
;shl eax,4 ;de l'erreur.
|
||||
;add ax,cs:current
|
||||
;jmp endofint ;on termine l'int
|
||||
noerror:
|
||||
and byte ptr [bp+6],0FEh;Si pas d'erreur on efface le Bit CARRY du FLAG qui sera dépilé lors du IRET
|
||||
endofint:
|
||||
pop bp
|
||||
sti ;On réactive les interruptions logiciellement
|
||||
iret ;Puis on retourne au programme appelant.
|
||||
|
||||
current dw 0 ;Mot temporaire qui contient l'adresse de la fonction appelée
|
||||
tables dw setvideomode ;Table qui contient les adresses de toutes les fonctions de VIDEO (WORD)
|
||||
|
||||
|
||||
;Librairie qui prend en charge le format de STR ASCIIZ
|
||||
;# nombre 8
|
||||
;@ str 7
|
||||
;& nom 6
|
||||
|
||||
;High Low
|
||||
;0 variable 4 hex
|
||||
;1 byte 3 dec
|
||||
;2 word 2 oct
|
||||
;3 3 octets 1 bin
|
||||
;4 dword 5 adresse
|
||||
;5 5 octets 6 nom
|
||||
;6 ... 7 str
|
||||
; 8 nombre
|
||||
|
||||
|
||||
;Renvoie carry si la syntaxe de ds:si n'est pas respect‚ par rapport a es:di
|
||||
CheckSyntax0:
|
||||
push ax bx dx bp si di ds es
|
||||
push es di
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset temp2
|
||||
call copy0
|
||||
mov si,di
|
||||
push cs
|
||||
pop ds
|
||||
pop di es
|
||||
call getdelimiter0
|
||||
mov bp,dx
|
||||
mov dl,' '
|
||||
call setdelimiter0
|
||||
call compressdelimiter0
|
||||
call uppercase0
|
||||
call getnbitems0
|
||||
;call xch
|
||||
;mov ax,cx
|
||||
;call getnbitem0
|
||||
;call xch
|
||||
;cmp ax,cx
|
||||
;call xch
|
||||
;jne notequalatall
|
||||
mov bx,cx
|
||||
xor cx,cx
|
||||
itemer:
|
||||
call whatisitem0
|
||||
mov dx,ax
|
||||
call xch
|
||||
call whatisitem0
|
||||
call xch
|
||||
cmp ax,dx
|
||||
jne prob
|
||||
cmp al,6
|
||||
jb equal
|
||||
call cmpitems0
|
||||
je equal
|
||||
prob:
|
||||
cmp dl,4
|
||||
ja nosize
|
||||
cmp al,8
|
||||
je equal
|
||||
cmp al,4
|
||||
jne notequalatall
|
||||
cmp dh,ah
|
||||
ja notequalatall
|
||||
jmp equal
|
||||
nosize:
|
||||
cmp al,7
|
||||
jne noname
|
||||
cmp ah,0
|
||||
jne notequalatall
|
||||
jmp equal
|
||||
noname:
|
||||
cmp al,8
|
||||
je equal
|
||||
jmp notequalatall
|
||||
equal:
|
||||
inc cx
|
||||
cmp cx,bx
|
||||
jne itemer
|
||||
cld
|
||||
ackno:
|
||||
mov dx,bp
|
||||
call setdelimiter0
|
||||
pop es ds di si bp dx bx ax
|
||||
ret
|
||||
notequalatall:
|
||||
stc
|
||||
jmp ackno
|
||||
xch:
|
||||
push ds
|
||||
push es
|
||||
pop ds
|
||||
pop es
|
||||
xchg si,di
|
||||
ret
|
||||
|
||||
temp2 db 256 dup (0)
|
||||
|
||||
;Compare les ‚l‚ments cx de deux chaine ds:si et es:di
|
||||
Cmpitems0:
|
||||
push cx dx si di
|
||||
push cx di
|
||||
call getpointeritem0
|
||||
mov si,di
|
||||
xor cx,cx
|
||||
inc cx
|
||||
call getpointeritem0
|
||||
mov dx,di
|
||||
sub dx,si
|
||||
dec cx
|
||||
pop di cx
|
||||
push ds si
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
call getpointeritem0
|
||||
pop si ds
|
||||
mov cx,dx
|
||||
rep cmpsb
|
||||
pop di si dx cx
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;Renvoie l'‚l‚ment cx de ds:si dans edx si nb et dans es:di si str ou name
|
||||
gettypeditem0:
|
||||
push bx cx si
|
||||
call getpointeritem0
|
||||
mov si,di
|
||||
xor cx,cx
|
||||
inc cl
|
||||
call getpointeritem0
|
||||
mov bx,di
|
||||
dec bx
|
||||
mov cl,0
|
||||
xchg cl,ds:[bx]
|
||||
call gettyped0
|
||||
xchg cl,ds:[bx]
|
||||
pop si cx bx
|
||||
ret
|
||||
|
||||
;Renvoie ds:si dans edx si nb et dans es:di si str ou name
|
||||
gettyped0:
|
||||
push ax
|
||||
call whatis0
|
||||
cmp al,5
|
||||
jb number
|
||||
cmp al,6
|
||||
je pointer
|
||||
push ds
|
||||
pop es
|
||||
call getpointeritem0
|
||||
jmp endofGettypeditem0
|
||||
number:
|
||||
mov edx,cs:lastnumber
|
||||
jmp endofgettypeditem0
|
||||
pointer:
|
||||
call str0toadress
|
||||
endofgettypeditem0:
|
||||
pop ax
|
||||
ret
|
||||
|
||||
;Renvoie dans ax le type de la str0 point‚e par ds:si ‚l‚ment cx
|
||||
whatisitem0:
|
||||
push bx cx si di
|
||||
call getpointeritem0
|
||||
mov si,di
|
||||
xor cx,cx
|
||||
inc cl
|
||||
call getpointeritem0
|
||||
mov bx,di
|
||||
dec bx
|
||||
mov cl,0
|
||||
xchg cl,ds:[bx]
|
||||
call whatis0
|
||||
xchg cl,ds:[bx]
|
||||
pop di si cx bx
|
||||
ret
|
||||
|
||||
;Renvoie dans ax le type de la str0 point‚e par ds:si
|
||||
;High Low
|
||||
;0 variable 4 hex
|
||||
;1 byte 3 dec
|
||||
;2 word 2 oct
|
||||
;3 3 octets 1 bin
|
||||
;4 dword 5 adresse
|
||||
;5 5 octets 6 name
|
||||
;6 ... 7 str
|
||||
whatis0:
|
||||
push bx cx edx
|
||||
mov cl,2
|
||||
call str0isbase
|
||||
jnc finbase
|
||||
mov cl,8
|
||||
call str0isbase
|
||||
jnc finbase
|
||||
mov cl,10
|
||||
call str0isbase
|
||||
jnc finbase
|
||||
mov cl,16
|
||||
call str0isbase
|
||||
jc testadress
|
||||
finbase:
|
||||
mov bx,cx
|
||||
xor ch,ch
|
||||
mov al,cs:[bx+offset basenn-2]
|
||||
call str0toint
|
||||
mov cs:Lastnumber,edx
|
||||
cmp edx,0000FFFFh
|
||||
ja bits32
|
||||
cmp dx,00FFh
|
||||
ja bits16
|
||||
mov ah,1
|
||||
jmp endofwhat
|
||||
bits16:
|
||||
mov ah,2
|
||||
jmp endofwhat
|
||||
bits32:
|
||||
mov ah,3
|
||||
jmp endofwhat
|
||||
testadress:
|
||||
call str0isadress
|
||||
jc testname
|
||||
mov ax,0005h
|
||||
jmp endofwhat
|
||||
testname:
|
||||
;call str0isname
|
||||
;jc testvarstr
|
||||
;jnc isok
|
||||
;mov al,06h
|
||||
cmp byte ptr [si],'&'
|
||||
jne testvarstr
|
||||
mov al,06h
|
||||
call getlength0
|
||||
dec cl
|
||||
mov ah,cl
|
||||
jmp endofwhat
|
||||
testvarstr:
|
||||
cmp byte ptr [si],'@'
|
||||
jne testnumber
|
||||
mov al,07h
|
||||
call getlength0
|
||||
dec cl
|
||||
mov ah,cl
|
||||
jmp endofwhat
|
||||
testnumber:
|
||||
cmp byte ptr [si],'#'
|
||||
jne isstr
|
||||
mov al,8
|
||||
call getlength0
|
||||
dec cl
|
||||
mov ah,cl
|
||||
jmp endofwhat
|
||||
isstr:
|
||||
mov al,07h
|
||||
call getlength0
|
||||
mov ah,cl
|
||||
endofwhat:
|
||||
pop edx cx bx
|
||||
ret
|
||||
|
||||
Lastnumber dd 0
|
||||
|
||||
;Renvoie non carry si la str ds:si point‚e peut ˆtre une adresse
|
||||
str0isadress:
|
||||
;push
|
||||
stc
|
||||
;pop
|
||||
ret
|
||||
|
||||
;Renvoie en es:di le pointeur str0 ds:si
|
||||
Str0toAdress:
|
||||
;push
|
||||
stc
|
||||
;pop
|
||||
ret
|
||||
|
||||
;Renvoie non carry si la str ds:si point‚e peut ˆtre un nom de fichier
|
||||
str0isname:
|
||||
push ax si di
|
||||
isname:
|
||||
mov al,[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je itsok
|
||||
mov di,offset non
|
||||
verify:
|
||||
mov ah,[di]
|
||||
inc di
|
||||
cmp ah,0FFh
|
||||
je isname
|
||||
cmp ah,al
|
||||
jne verify
|
||||
stc
|
||||
jmp itsdead
|
||||
itsok:
|
||||
clc
|
||||
itsdead:
|
||||
pop di si ax
|
||||
ret
|
||||
|
||||
non db '/<>|"?*:\',01,0FFh
|
||||
|
||||
;Renvoie non carry si le texte point‚ par si est de la base cl
|
||||
str0isbase:
|
||||
push ax cx si di es
|
||||
push cs
|
||||
pop es
|
||||
mov ah,cl
|
||||
isstrbase:
|
||||
mov al,[si]
|
||||
cmp al,0
|
||||
je okbase
|
||||
mov cl,ah
|
||||
xor ch,ch
|
||||
mov di,cx
|
||||
cmp al,es:[di-2+offset basen]
|
||||
je verifbase
|
||||
xor ch,ch
|
||||
inc cl
|
||||
mov di,offset base
|
||||
cld
|
||||
repne scasb
|
||||
cmp cx,0
|
||||
je nobase
|
||||
inc si
|
||||
jmp isstrbase
|
||||
okbase:
|
||||
clc
|
||||
endbase:
|
||||
pop es di si cx ax
|
||||
ret
|
||||
verifbase:
|
||||
cmp byte ptr [si+1],0
|
||||
je okbase
|
||||
nobase:
|
||||
stc
|
||||
jmp endbase
|
||||
|
||||
temp dw 0
|
||||
|
||||
;Converti un str de base cl en int dans edx
|
||||
str0toint:
|
||||
push eax bx ecx si edi ebp es
|
||||
push cs
|
||||
pop es
|
||||
mov ah,cl
|
||||
mov cs:temp,si
|
||||
gotos:
|
||||
cmp byte ptr [si+1], 0
|
||||
je oklo
|
||||
inc si
|
||||
jmp gotos
|
||||
oklo:
|
||||
mov edi,1
|
||||
xor ebp,ebp
|
||||
mov bl,cl
|
||||
baseto:
|
||||
cmp si,cs:temp
|
||||
jb endbaseto
|
||||
mov al,[si]
|
||||
xor ecx,ecx
|
||||
mov cl,bl
|
||||
inc cl
|
||||
push di
|
||||
mov di,offset base
|
||||
cld
|
||||
repne scasb
|
||||
pop di
|
||||
jne noop
|
||||
sub cl,bl
|
||||
neg cl
|
||||
mov eax,edi
|
||||
mul ecx
|
||||
add ebp,eax
|
||||
mov eax,edi
|
||||
mov cl,bl
|
||||
mul ecx
|
||||
mov edi,eax
|
||||
noop:
|
||||
dec si
|
||||
jmp baseto
|
||||
endbaseto:
|
||||
mov edx,ebp
|
||||
pop es ebp edi si ecx bx eax
|
||||
ret
|
||||
base db '0123456789ABCDEF'
|
||||
basen db 'B O D H'
|
||||
basenn db 1,0,0,0,0,0,2,0,3,0,0,0,0,0,4
|
||||
|
||||
;Renvoie en es:di la partie de cx caractŠres a partir de la gauche de ds:si
|
||||
Left0:
|
||||
push ax cx si di
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;Renvoie en es:di la partie de cx caractŠres a partir de la droite de ds:si
|
||||
Right0:
|
||||
push ax cx dx si di
|
||||
mov dx,cx
|
||||
call getlength0
|
||||
add si,cx
|
||||
sub si,dx
|
||||
mov cx,dx
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si dx cx ax
|
||||
ret
|
||||
|
||||
;Renvoie en es:di la partie de cx caractŠres a partir de la position bx de ds:si
|
||||
middle0:
|
||||
push ax cx si di
|
||||
add si,bx
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;Rempli de cx caractŠres dl a partir de la position bx de ds:si
|
||||
Fill0:
|
||||
push ax bx cx si di es
|
||||
push ds
|
||||
pop es
|
||||
add si,bx
|
||||
mov al,dl
|
||||
mov di,si
|
||||
cld
|
||||
rep stosb
|
||||
pop es di si cx bx ax
|
||||
ret
|
||||
|
||||
;Remplace tout les caractŠres al de ds:si par des caractŠres dl
|
||||
ReplaceAllchar0:
|
||||
push ax cx di es
|
||||
call GetLength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
findandchange:
|
||||
repne scasb
|
||||
cmp cx,0
|
||||
je endofchange
|
||||
mov es:[di-1],dl
|
||||
jmp findandchange
|
||||
endofchange:
|
||||
pop es di cx ax
|
||||
ret
|
||||
|
||||
|
||||
;Recherche un caractŠre dl dans la chaŒne ds:si
|
||||
SearchChar0:
|
||||
push ax cx di es
|
||||
call GetLength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,dl
|
||||
repne scasb
|
||||
pop es di cx ax
|
||||
ret
|
||||
|
||||
;Inverse la chaine point‚e en ds:si
|
||||
invert0:
|
||||
push ax cx si di es
|
||||
call GetLength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
add di,cx
|
||||
dec di
|
||||
revert:
|
||||
mov al,[si]
|
||||
xchg al,es:[di]
|
||||
mov [si],al
|
||||
inc si
|
||||
dec di
|
||||
cmp si,di
|
||||
je finishinvert
|
||||
dec di
|
||||
cmp si,di
|
||||
je finishinvert
|
||||
inc di
|
||||
jmp revert
|
||||
finishinvert:
|
||||
pop es di si cx ax
|
||||
ret
|
||||
|
||||
;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal
|
||||
cmpstr0:
|
||||
push cx dx si di
|
||||
call GetLength0
|
||||
mov dx,cx
|
||||
push ds si
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
call GetLength0
|
||||
pop si ds
|
||||
cmp cx,dx
|
||||
jne NotEqual
|
||||
repe cmpsb
|
||||
NotEqual:
|
||||
pop di si dx cx
|
||||
ret
|
||||
|
||||
;Compares 2 chaines de caractŠres DS:SI et ES:DI zerof si non equal et renvoie le nb de caractŠre egaux dans dx
|
||||
evalue0:
|
||||
push cx si di
|
||||
push ds si
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
call GetLength0
|
||||
pop si ds
|
||||
mov dx,cx
|
||||
repe cmpsb
|
||||
pushf
|
||||
sub dx,cx
|
||||
popf
|
||||
pop di si cx
|
||||
ret
|
||||
|
||||
|
||||
;Insert une chaine ds:si en es:di a partir du caractŠre cx
|
||||
insert0:
|
||||
push cx di si
|
||||
add di,cx
|
||||
call getlength0
|
||||
push si di ds
|
||||
push es
|
||||
pop ds
|
||||
mov si,di
|
||||
add di,cx
|
||||
call copy20
|
||||
pop ds di si
|
||||
cld
|
||||
inc di
|
||||
rep movsb
|
||||
pop si di cx
|
||||
ret
|
||||
|
||||
;Detruit CX caractŠres a partir du caractŠre BX de DS:SI
|
||||
delete0:
|
||||
push cx dx si di es
|
||||
push ds
|
||||
pop es
|
||||
mov dx,cx
|
||||
call getlength0
|
||||
sub cx,dx
|
||||
sub cx,bx
|
||||
inc cx
|
||||
add si,bx
|
||||
mov di,si
|
||||
add si,dx
|
||||
cld
|
||||
rep movsb
|
||||
pop es di si dx cx
|
||||
ret
|
||||
|
||||
;Copie une chaine de ds:si en es:di
|
||||
Copy0:
|
||||
push ax cx si di
|
||||
call GetLength0
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;Copie une chaine de ds:si en es:di
|
||||
Copy20:
|
||||
push ax cx si di
|
||||
call GetLength0
|
||||
cld
|
||||
add si,cx
|
||||
add di,cx
|
||||
inc cx
|
||||
std
|
||||
rep movsb
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;ConcatŠne le chaine ds:si avec es:di
|
||||
Concat0:
|
||||
push ax cx dx si di
|
||||
call GetLength0
|
||||
mov dx,cx
|
||||
xchg si,di
|
||||
push ds
|
||||
push es
|
||||
pop ds
|
||||
call GetLength0
|
||||
pop ds
|
||||
xchg si,di
|
||||
add di,cx
|
||||
mov cx,dx
|
||||
cld
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop di si dx cx ax
|
||||
ret
|
||||
|
||||
;Met DL comme d‚limiteur par d‚faut
|
||||
SetDelimiter0:
|
||||
mov cs:delim,dl
|
||||
ret
|
||||
|
||||
;Renvoie le d‚limiteur par d‚faut dans dl
|
||||
GetDelimiter0:
|
||||
mov dl,cs:delim
|
||||
ret
|
||||
delim db 0
|
||||
|
||||
;D‚truit les d‚limiteur qui sont cons‚cutifs dans ds:si
|
||||
CompressDelimiter0:
|
||||
push ax dx si di es
|
||||
call Getlength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,cs:delim
|
||||
xor dx,dx
|
||||
Compressitems:
|
||||
repne scasb
|
||||
inc dx
|
||||
againcomp:
|
||||
cmp [di],al
|
||||
jne nosup
|
||||
mov si,di
|
||||
mov bx,0
|
||||
push cx
|
||||
mov cx,1
|
||||
call delete0
|
||||
pop cx
|
||||
jmp againcomp
|
||||
nosup:
|
||||
cmp cx,0
|
||||
jne compressitems
|
||||
mov cx,dx
|
||||
pop es di si dx ax
|
||||
ret
|
||||
|
||||
;Met le nombre d'‚l‚ments … cx
|
||||
Setnbitems0:
|
||||
push ax cx dx di es
|
||||
mov dx,cx
|
||||
call Getnbitems0
|
||||
cmp cx,dx
|
||||
je noadjust
|
||||
ja subsome
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
sub cx,dx
|
||||
neg cx
|
||||
push cx
|
||||
call getlength0
|
||||
add di,cx
|
||||
pop cx
|
||||
mov al,cs:delim
|
||||
mov ah,'a'
|
||||
rep stosw
|
||||
mov al,0
|
||||
stosb
|
||||
jmp noadjust
|
||||
subsome:
|
||||
mov cx,dx
|
||||
call GetPointeritem0
|
||||
dec di
|
||||
mov byte ptr [di],0
|
||||
noadjust:
|
||||
pop es di dx cx
|
||||
ret
|
||||
|
||||
;Renvoie la taille dx de l'‚l‚ment cx
|
||||
Getitemsize:
|
||||
push cx di
|
||||
call getpointeritem0
|
||||
mov dx,di
|
||||
inc cx
|
||||
call getpointeritem0
|
||||
sub dx,di
|
||||
neg dx
|
||||
dec dx
|
||||
pop di cx
|
||||
ret
|
||||
|
||||
;Renvoie en es:di l'‚l‚ment cx de ds:si
|
||||
Getitem0:
|
||||
push si di cx ax
|
||||
push di
|
||||
call getPointeritem0
|
||||
call getitemsize
|
||||
mov si,di
|
||||
pop di
|
||||
mov cx,dx
|
||||
rep movsb
|
||||
mov al,0
|
||||
stosb
|
||||
pop ax cx di si
|
||||
ret
|
||||
|
||||
;renvoi un pointeur di sur l'‚l‚ment cx de ds:si
|
||||
GetPointeritem0:
|
||||
push ax bx cx dx es
|
||||
mov bx,cx
|
||||
call Getlength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,cs:delim
|
||||
xor dx,dx
|
||||
Countnbitems:
|
||||
cmp bx,dx
|
||||
je finishpointer
|
||||
repne scasb
|
||||
inc dx
|
||||
cmp cx,0
|
||||
jne countnbitems
|
||||
inc di
|
||||
finishpointer:
|
||||
pop es dx cx bx ax
|
||||
ret
|
||||
|
||||
;Renvoie le nombre d'‚l‚ments cx de ds:si
|
||||
GetNbitems0:
|
||||
push ax dx di es
|
||||
call Getlength0
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,cs:delim
|
||||
xor dx,dx
|
||||
Countitems:
|
||||
repne scasb
|
||||
inc dx
|
||||
cmp cx,0
|
||||
jne countitems
|
||||
mov cx,dx
|
||||
pop es di dx ax
|
||||
ret
|
||||
|
||||
;renvoie la taille en octets CX de la chaine point‚e en ds:si
|
||||
GetLength0:
|
||||
push ax di es
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
mov al,0
|
||||
mov cx,0FFFFh
|
||||
cld
|
||||
repne scasb
|
||||
neg cx
|
||||
dec cx
|
||||
dec cx
|
||||
pop es di ax
|
||||
ret
|
||||
|
||||
;Met la taille en octets de la chaine point‚e ds:si a CX
|
||||
SetLength0:
|
||||
push bx
|
||||
mov bx,cx
|
||||
mov byte ptr [si+bx],0
|
||||
pop bx
|
||||
ret
|
||||
|
||||
;met en majuscule la chaine ds:si
|
||||
UpperCase0:
|
||||
push si ax
|
||||
UpperCase:
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je EndUpperCase
|
||||
cmp al,'a'
|
||||
jb UpperCase
|
||||
cmp al,'z'
|
||||
ja UpperCase
|
||||
sub byte ptr [si-1],'a'-'A'
|
||||
jmp UpperCase
|
||||
EndUpperCase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
;met en majuscule la premiŠre lettre chaine ds:si
|
||||
OneCase0:
|
||||
push ax
|
||||
OneUpperCase:
|
||||
mov al,ds:[si]
|
||||
cmp al,'a'
|
||||
jb OneEndUpperCase
|
||||
cmp al,'z'
|
||||
ja OneEndUpperCase
|
||||
sub byte ptr [si],'a'-'A'
|
||||
OneEndUpperCase:
|
||||
clc
|
||||
pop ax
|
||||
ret
|
||||
|
||||
;met en minuscule la chaine ds:si
|
||||
LowerCase0:
|
||||
push si ax
|
||||
LowerCase:
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je EndLowerCase
|
||||
cmp al,'A'
|
||||
jb LowerCase
|
||||
cmp al,'Z'
|
||||
ja LowerCase
|
||||
add byte ptr [si-1],'a'-'A'
|
||||
jmp LowerCase
|
||||
EndLowerCase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
;Inverse la casse la chaine ds:si
|
||||
InvertCase0:
|
||||
push si ax
|
||||
InvertCase:
|
||||
mov al,ds:[si]
|
||||
inc si
|
||||
cmp al,0
|
||||
je EndInvertCase
|
||||
cmp al,'A'
|
||||
jb InvertCase
|
||||
cmp al,'Z'
|
||||
jbe GoInvertCase
|
||||
cmp al,'a'
|
||||
jb InvertCase
|
||||
cmp al,'z'
|
||||
ja InvertCase
|
||||
sub byte ptr [si-1],'a'-'A'
|
||||
jmp InvertCase
|
||||
GoInvertCase:
|
||||
add byte ptr [si-1],'a'-'A'
|
||||
jmp InvertCase
|
||||
EndInvertCase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
end start
|
|
@ -0,0 +1,81 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
start:
|
||||
|
||||
jmp tsr
|
||||
offsets dd 0
|
||||
db 'HOURS'
|
||||
tsr:
|
||||
pushf
|
||||
db 2eh,0ffh,1eh
|
||||
dw offsets
|
||||
cli
|
||||
pusha
|
||||
push ds es
|
||||
push cs
|
||||
push cs
|
||||
pop ds
|
||||
pop es
|
||||
mov ah,22h
|
||||
mov di,offset infos
|
||||
int 47h
|
||||
mov bl,[infos+1]
|
||||
xor bh,bh
|
||||
sub bl,8
|
||||
mov di,bx
|
||||
shl di,1
|
||||
mov dx,71h
|
||||
xor eax,eax
|
||||
mov cx,0B800h
|
||||
mov es,cx
|
||||
mov cl,4
|
||||
mov bp,8
|
||||
show:
|
||||
dec dx
|
||||
mov al,cl
|
||||
out dx,al
|
||||
inc dx
|
||||
in al,dx
|
||||
call showbcd
|
||||
cmp cl,0
|
||||
je finic
|
||||
mov byte ptr es:[di],':'
|
||||
add di,2
|
||||
sub cl,2
|
||||
jmp show
|
||||
finic:
|
||||
pop es ds
|
||||
popa
|
||||
sti
|
||||
iret
|
||||
|
||||
|
||||
;==============================Affiche le nombre nb hexa en EDX==============
|
||||
Showbcd:
|
||||
push ax bx cx edx
|
||||
mov edx,eax
|
||||
mov cx,bp
|
||||
sub cx,32
|
||||
neg cx
|
||||
shl edx,cl
|
||||
mov ax,bp
|
||||
shr ax,2
|
||||
bcdaize:
|
||||
rol edx,4
|
||||
mov bx,dx
|
||||
and bx,0fh
|
||||
add bl,'0'
|
||||
mov es:[di],bl
|
||||
add di,2
|
||||
dec al
|
||||
jnz bcdaize
|
||||
pop edx cx bx ax
|
||||
ret
|
||||
infos db 40 dup (0)
|
||||
|
||||
end start
|
|
@ -0,0 +1,32 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
start:
|
||||
|
||||
jmp tsr
|
||||
offsets dd 0
|
||||
db 'TIMER'
|
||||
tsr:
|
||||
pushf
|
||||
db 2eh,0ffh,1eh
|
||||
dw offsets
|
||||
cli
|
||||
push ax bx es
|
||||
mov bx,cs:compteur
|
||||
inc bx
|
||||
and bx,11b
|
||||
mov cs:compteur,bx
|
||||
mov bx,cs:[offset fig+bx]
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov es:[0],bl
|
||||
pop es bx ax
|
||||
sti
|
||||
iret
|
||||
compteur dw 0
|
||||
fig db 'Ä\³/'
|
||||
end start
|
|
@ -0,0 +1,298 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
start:
|
||||
jmp tsr
|
||||
drv db 'JOYSTICK',0
|
||||
Tsr:
|
||||
cli
|
||||
cmp ax,1234h
|
||||
jne nomore
|
||||
mov ax,4321h
|
||||
jmp itsok
|
||||
nomore:
|
||||
push bx
|
||||
cmp byte ptr cs:isact,1
|
||||
je nottest
|
||||
mov cs:isact,1
|
||||
jmp react
|
||||
mov bl,ah
|
||||
xor bh,bh
|
||||
shl bx,1
|
||||
mov bx,cs:[bx].tables
|
||||
mov cs:current,bx
|
||||
pop bx
|
||||
call cs:current
|
||||
itsok:
|
||||
jnc noerror
|
||||
push bp
|
||||
mov bp,sp
|
||||
or byte ptr [bp+6],1b
|
||||
pop bp
|
||||
mov ax,cs
|
||||
shl eax,16
|
||||
mov ax,cs:current
|
||||
jmp endofint
|
||||
noerror:
|
||||
push bp
|
||||
mov bp,sp
|
||||
and byte ptr [bp+6],0FEh
|
||||
pop bp
|
||||
endofint:
|
||||
mov cs:isact,0
|
||||
sti
|
||||
iret
|
||||
nottest:
|
||||
pop bx
|
||||
jmp endofint
|
||||
current dw 0
|
||||
tables dw 0;detectjoystick
|
||||
;dw getjoystick
|
||||
;dw getjoystickscreen
|
||||
;dw configjoystick
|
||||
isact db 0
|
||||
|
||||
;envoie en bx,cx les coordonn‚es et en dl les boutons
|
||||
getjoystick:
|
||||
push ax cx
|
||||
mov bx,cs:rx
|
||||
mov cx,cs:ry
|
||||
mov al,cs:button
|
||||
not al
|
||||
mov cl,4
|
||||
shr al,cl
|
||||
mov dl,al
|
||||
pop cx ax
|
||||
ret
|
||||
|
||||
;envoie en di les coordonn‚es ecran et en dl les boutons
|
||||
getjoystickscreen:
|
||||
push ax cx
|
||||
mov di,cs:xy
|
||||
mov al,cs:button
|
||||
not al
|
||||
mov cl,4
|
||||
shr al,cl
|
||||
mov dl,al
|
||||
pop cx ax
|
||||
ret
|
||||
db 'button'
|
||||
Button db 0
|
||||
db 'rx'
|
||||
rx dw 0
|
||||
db 'ry'
|
||||
ry dw 0
|
||||
db 'vx'
|
||||
VX db 0
|
||||
db 'vy'
|
||||
VY db 0
|
||||
db 'x'
|
||||
X dw 7FFFh
|
||||
db 'y'
|
||||
Y dw 7FFFh
|
||||
speed db 6
|
||||
spherex db 0
|
||||
spherey db 0
|
||||
db 'count'
|
||||
count db 0
|
||||
db 'error'
|
||||
error db 0
|
||||
xy dw 0
|
||||
old db 0
|
||||
|
||||
calibrate db 0
|
||||
db 'ticks'
|
||||
ticks dw 0
|
||||
db 'state'
|
||||
state db 0
|
||||
db 'connard'
|
||||
connard db 1
|
||||
connard2 db 1
|
||||
;Gestionnaire de joystick
|
||||
react:
|
||||
push ax bx cx dx si di bp ds es
|
||||
push cs
|
||||
pop ds
|
||||
mov dx,201h
|
||||
cmp error, 1
|
||||
je gest1
|
||||
cmp count,1
|
||||
je gest1
|
||||
cmp count,2
|
||||
je gest2
|
||||
gest1:
|
||||
mov error,0
|
||||
mov count,2
|
||||
call getticks
|
||||
mov ticks,ax
|
||||
out dx,al
|
||||
in al,dx
|
||||
and al,00000011b
|
||||
mov state,al
|
||||
jmp endgest
|
||||
gest2:
|
||||
not connard
|
||||
call getticks
|
||||
sub ax,ticks
|
||||
cmp ax,1FF0h
|
||||
jb nofinish
|
||||
mov error,1
|
||||
jmp endgest
|
||||
nofinish:
|
||||
mov bx,ax
|
||||
in al,dx
|
||||
and al,00000011b
|
||||
cmp state,al
|
||||
je endgest
|
||||
xchg state,al
|
||||
xor al,state
|
||||
mov cl,4
|
||||
or bx,bx
|
||||
js noadj
|
||||
shr bx,cl
|
||||
noadj:
|
||||
test al,1
|
||||
je isy
|
||||
mov VX,bl
|
||||
jmp wasx
|
||||
isy:
|
||||
test al,2
|
||||
je endgest
|
||||
mov VY,bl
|
||||
wasx:
|
||||
mov connard2,0fh
|
||||
mov count,1
|
||||
endgest:
|
||||
in al,dx
|
||||
not al
|
||||
mov cl,4
|
||||
shr al,cl
|
||||
mov button,al
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
mov cl,speed
|
||||
movsx bx,VY
|
||||
shl bx,cl
|
||||
cmp spherey,0
|
||||
jne nolimity
|
||||
xor ah,ah
|
||||
mov al,[di]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text4
|
||||
shl ax,3
|
||||
text4:
|
||||
dec ax
|
||||
cmp bx,0
|
||||
jg decy
|
||||
cmp ry,ax
|
||||
jae noaddy
|
||||
jmp nolimity
|
||||
decy:
|
||||
cmp ry,0
|
||||
je noaddy
|
||||
nolimity:
|
||||
sub y,bx
|
||||
noaddy:
|
||||
movsx bx,VX
|
||||
shl bx,cl
|
||||
cmp spherex,0
|
||||
jne nolimitx
|
||||
xor ah,ah
|
||||
mov al,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text5
|
||||
shl ax,3
|
||||
text5:
|
||||
dec ax
|
||||
cmp bx,0
|
||||
jl decx
|
||||
cmp rx,ax
|
||||
jae noaddx
|
||||
jmp nolimitx
|
||||
decx:
|
||||
cmp rx,0
|
||||
je noaddx
|
||||
nolimitx:
|
||||
add x,bx
|
||||
noaddx:
|
||||
mov ax,x
|
||||
mov bx,0FFFFh
|
||||
xor ch,ch
|
||||
mov cl,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text1
|
||||
shl cx,3
|
||||
text1:
|
||||
mul cx
|
||||
div bx
|
||||
mov rx,ax
|
||||
mov ax,y
|
||||
xor ch,ch
|
||||
mov cl,[di]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text2
|
||||
shl cx,3
|
||||
text2:
|
||||
mul cx
|
||||
div bx
|
||||
mov ry,ax
|
||||
xor ch,ch
|
||||
mov cl,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text3
|
||||
shl cx,3
|
||||
text3:
|
||||
mul cx
|
||||
add ax,rx
|
||||
cmp byte ptr [di+7],4
|
||||
mov di,ax
|
||||
jbe textpoint
|
||||
mov ax,0A000h
|
||||
mov es,ax
|
||||
jmp graphpoint
|
||||
textpoint:
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
shl di,1
|
||||
inc di
|
||||
graphpoint:
|
||||
mov bx,xy
|
||||
cmp byte ptr es:[bx],070h
|
||||
jne waschanged
|
||||
mov al,old
|
||||
mov byte ptr es:[bx],al
|
||||
waschanged:
|
||||
mov xy,di
|
||||
mov al,es:[di]
|
||||
mov old,al
|
||||
mov byte ptr es:[di],070h
|
||||
mov al, 20h
|
||||
out 0a0h, al
|
||||
out 20h, al
|
||||
errormouse:
|
||||
pop es ds bp di si dx cx bx ax
|
||||
mov cs:isact,0
|
||||
pop bx
|
||||
iret
|
||||
infos db 40 dup (0)
|
||||
|
||||
|
||||
getticks:
|
||||
mov al,0
|
||||
out 43h,al
|
||||
jmp wait1
|
||||
wait1:
|
||||
in al,40h
|
||||
mov ah,al
|
||||
jmp wait2
|
||||
wait2:
|
||||
in al,40h
|
||||
xchg ah,al
|
||||
ret
|
||||
|
||||
end start
|
|
@ -0,0 +1,119 @@
|
|||
FirstMB dw 0
|
||||
|
||||
;Initialise les blocs de mémoire
|
||||
MBinit:
|
||||
push ax cx es
|
||||
mov ax,gs
|
||||
mov cs:Firstmb,ax
|
||||
dec ax
|
||||
mov es,ax
|
||||
mov cx,0A000h
|
||||
sub cx,ax
|
||||
dec cx
|
||||
mov es:[MB.Reference],Free
|
||||
mov es:[MB.Sizes],cx
|
||||
mov es:[MB.Check],'NH'
|
||||
mov es:[MB.IsNotLast],False
|
||||
clc
|
||||
pop es cx ax
|
||||
ret
|
||||
notforfree:
|
||||
stc
|
||||
pop es cx ax
|
||||
ret
|
||||
|
||||
;Libère le bloc de mémoire GS
|
||||
MBFree:
|
||||
push bx es
|
||||
mov bx,gs
|
||||
dec bx
|
||||
mov es,bx
|
||||
cmp es:[MB.Check],'NH'
|
||||
je notforfree
|
||||
mov es:[MB.IsResident],0
|
||||
mov es:[MB.Reference],Free
|
||||
mov dword ptr es:[MB.Names],'eerF'
|
||||
mov dword ptr es:[MB.Names+4],0
|
||||
pop es bx
|
||||
ret
|
||||
|
||||
;Creér un bloc de nom ds:si de taille cx (octets) -> n°segement dans GS
|
||||
MBCreate:
|
||||
push ax bx cx dx si di es
|
||||
shr cx,4
|
||||
inc cx
|
||||
mov bx,cs:firstmb
|
||||
dec bx
|
||||
searchfree:
|
||||
mov es,bx
|
||||
cmp es:[MB.Check],'NH'
|
||||
jne wasntgood
|
||||
cmp es:[MB.IsNotLast],True
|
||||
sete dl
|
||||
cmp es:[MB.Reference],Free
|
||||
je weregood
|
||||
cmp dl,False
|
||||
je wasntgood
|
||||
notsogood:
|
||||
inc bx
|
||||
add bx,es:[MB.Sizes]
|
||||
jmp searchfree
|
||||
weregood:
|
||||
mov ax,es:[MB.Sizes]
|
||||
cmp cx,ax
|
||||
ja notsogood
|
||||
mov es:[MB.IsNotLast],True
|
||||
mov es:[MB.Reference],cs
|
||||
mov es:[MB.IsResident],False
|
||||
mov es:[MB.Sizes],cx
|
||||
mov di,MB.Names
|
||||
push ax cx
|
||||
mov cx,8
|
||||
loops:
|
||||
mov dh,[si]
|
||||
inc si
|
||||
dec cx
|
||||
jz endofloops
|
||||
cmp dh,0
|
||||
je endofloops
|
||||
mov es:[di],dh
|
||||
inc di
|
||||
jmp loops
|
||||
endofloops:
|
||||
inc cx
|
||||
mov al,0
|
||||
rep stosb
|
||||
pop cx ax
|
||||
mov word ptr es:[MB.Check],'NH'
|
||||
sub ax,cx
|
||||
dec ax
|
||||
js nofree
|
||||
inc bx
|
||||
mov gs,bx
|
||||
add bx,cx
|
||||
mov es,bx
|
||||
mov es:[MB.IsNotLast],dl
|
||||
mov es:[MB.IsResident],False
|
||||
mov es:[MB.Reference],Free
|
||||
mov es:[MB.Sizes],ax
|
||||
mov dword ptr es:[MB.Names],'eerF'
|
||||
mov dword ptr es:[MB.Names+4],0
|
||||
mov es:[MB.Check],'NH'
|
||||
nofree:
|
||||
clc
|
||||
pop es di si dx cx bx ax
|
||||
ret
|
||||
wasntgood:
|
||||
stc
|
||||
pop es di si dx cx bx ax
|
||||
ret
|
||||
|
||||
;Rend le segment GS résident
|
||||
MBresident:
|
||||
push bx es
|
||||
mov bx,gs
|
||||
dec bx
|
||||
mov es,bx
|
||||
mov es:[MB.IsResident],True
|
||||
pop es bx
|
||||
ret
|
|
@ -0,0 +1,699 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
start:
|
||||
jmp tsr
|
||||
drv db 'LPT ',0
|
||||
Tsr:
|
||||
cli
|
||||
cmp ax,1234h
|
||||
jne nomore
|
||||
mov ax,4321h
|
||||
jmp itsok
|
||||
nomore:
|
||||
push bx ax
|
||||
mov ah,4
|
||||
mov bh,1
|
||||
int 50h
|
||||
mov bl,al
|
||||
pop ax
|
||||
cmp byte ptr cs:isact,1
|
||||
je nottest
|
||||
mov cs:isact,1
|
||||
cmp bl,80h
|
||||
jae react
|
||||
mov bl,ah
|
||||
xor bh,bh
|
||||
shl bx,1
|
||||
mov bx,cs:[bx].tables
|
||||
mov cs:current,bx
|
||||
pop bx
|
||||
call cs:current
|
||||
itsok:
|
||||
jnc noerror
|
||||
push bp
|
||||
mov bp,sp
|
||||
or byte ptr [bp+6],1b
|
||||
pop bp
|
||||
mov ax,cs
|
||||
shl eax,16
|
||||
mov ax,cs:current
|
||||
jmp endofint
|
||||
noerror:
|
||||
push bp
|
||||
mov bp,sp
|
||||
and byte ptr [bp+6],0FEh
|
||||
pop bp
|
||||
endofint:
|
||||
mov cs:isact,0
|
||||
sti
|
||||
iret
|
||||
nottest:
|
||||
pop bx
|
||||
jmp endofint
|
||||
current dw 0
|
||||
tables dw getlptin
|
||||
dw getlptout
|
||||
dw getlptinout
|
||||
dw setlptin
|
||||
dw setlptout
|
||||
dw setlptinout
|
||||
dw getlpt
|
||||
dw getfirstlpt
|
||||
dw setemettor
|
||||
dw setreceptor
|
||||
dw settimeout
|
||||
dw gettimeout
|
||||
dw receivelpt
|
||||
dw sendlpt
|
||||
dw receivelptblock
|
||||
dw sendlptblock
|
||||
dw receivecommand
|
||||
dw sendcommand
|
||||
|
||||
react:
|
||||
push ds es
|
||||
mov cs:isact,1
|
||||
pushad
|
||||
push cs
|
||||
pop ds
|
||||
push cs
|
||||
pop es
|
||||
cmp byte ptr never,1
|
||||
je oknever
|
||||
mov bl,[drv+3]
|
||||
sub bl,'0'
|
||||
xor bh,bh
|
||||
call getlpt
|
||||
dec bl
|
||||
shl bl,1
|
||||
mov al,7
|
||||
sub al,bl
|
||||
mov ah,40
|
||||
mov di,offset video
|
||||
int 47h
|
||||
push ax
|
||||
mov ah,01h
|
||||
int 50h
|
||||
mov ah,21
|
||||
mov cl,4
|
||||
int 47h
|
||||
sti
|
||||
mov al,0111b
|
||||
call setlptout
|
||||
call setreceptor
|
||||
call initlpt
|
||||
jc errorie
|
||||
mov cx,0
|
||||
mov ah,20
|
||||
mov bx,1012h
|
||||
mov si,offset initok
|
||||
int 47h
|
||||
cmp byte ptr always,1
|
||||
je yes
|
||||
mov ah,20
|
||||
mov bx,1010h
|
||||
mov si,offset mdd
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset drv
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
mov ah,20
|
||||
mov bx,1011h
|
||||
mov si,offset msg
|
||||
int 47h
|
||||
waitkey:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp al,'n'
|
||||
je no
|
||||
cmp al,'N'
|
||||
je no
|
||||
cmp al,'Y'
|
||||
je yes
|
||||
cmp al,'y'
|
||||
je yes
|
||||
cmp al,'e'
|
||||
je nev
|
||||
cmp al,'E'
|
||||
je nev
|
||||
cmp al,'a'
|
||||
je alw
|
||||
cmp al,'A'
|
||||
je alw
|
||||
jmp waitkey
|
||||
yes:
|
||||
call receivecommand
|
||||
jc errortimeout
|
||||
no:
|
||||
mov al,0111b
|
||||
call setlptout
|
||||
cli
|
||||
mov ah,41
|
||||
mov si,offset video
|
||||
int 47h
|
||||
pop ax
|
||||
mov ah,00h
|
||||
int 50h
|
||||
mov ah,09h
|
||||
int 50h
|
||||
oknever:
|
||||
popad
|
||||
pop es ds
|
||||
mov cs:isact,0
|
||||
pop bx
|
||||
jmp endofint
|
||||
errorie:
|
||||
mov si,offset inits
|
||||
jmp show
|
||||
errortimeout:
|
||||
mov si,offset timeouts
|
||||
show:
|
||||
mov ah,20
|
||||
mov bx,1012h
|
||||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
jmp no
|
||||
nev:
|
||||
mov byte ptr never,1
|
||||
jmp no
|
||||
alw:
|
||||
mov byte ptr always,1
|
||||
jmp yes
|
||||
initok db 'Initialisation is realised !',0
|
||||
inits db 'Error on initialisation',0
|
||||
timeouts db 'Connection lost or timeout complete !!',0
|
||||
mdd db 'Connection demand on ',0
|
||||
msg db 'Accept connection ? (Y)es (N)o n(E)ver (A)lways',0
|
||||
isact db 0
|
||||
always db 0
|
||||
never db 0
|
||||
|
||||
;envois une commande al
|
||||
sendcommand:
|
||||
push ax bx cx di
|
||||
mov bl,al
|
||||
xor bh,bh
|
||||
shl bx,1
|
||||
add bx,offset cmde
|
||||
call cs:[bx]
|
||||
pop di cx bx ax
|
||||
ret
|
||||
cmde dw nothing
|
||||
dw getram
|
||||
|
||||
;recupŠre la ram en ds:si de cx distant caractŠres en es:di local
|
||||
getram:
|
||||
push ax bx cx ds
|
||||
mov bx,offset command
|
||||
mov cs:[bx+2],ds
|
||||
mov cs:[bx],si
|
||||
mov cs:[bx+4],cx
|
||||
push cs
|
||||
pop ds
|
||||
mov si,bx
|
||||
mov cx,6
|
||||
call sendlptblock
|
||||
jc endofget
|
||||
call receivelptblock
|
||||
endofget:
|
||||
pop ds cx bx ax
|
||||
ret
|
||||
|
||||
;Re‡ois une commande et l'execute
|
||||
Receivecommand:
|
||||
push ax bx cx di ds es
|
||||
push cs
|
||||
pop es
|
||||
push cs
|
||||
pop ds
|
||||
mov di,offset command
|
||||
call receivelptblock
|
||||
jc endofno
|
||||
mov bl,al
|
||||
xor bh,bh
|
||||
shl bx,1
|
||||
add bx,offset cmd
|
||||
call cs:[bx]
|
||||
clc
|
||||
endofno:
|
||||
pop es ds di cx bx ax
|
||||
ret
|
||||
|
||||
command db 25 dup (0)
|
||||
cmd dw nothings
|
||||
dw sendram
|
||||
dw receiveram
|
||||
dw sendreg
|
||||
dw receivereg
|
||||
dw sendport
|
||||
dw receiveport
|
||||
dw letexecute
|
||||
nothings:
|
||||
ret
|
||||
|
||||
letexecute:
|
||||
push ds es fs gs
|
||||
pushad
|
||||
push cs
|
||||
push offset suite
|
||||
mov ax,es:[di+2]
|
||||
mov ds,ax
|
||||
mov es,ax
|
||||
mov fs,ax
|
||||
mov gs,ax
|
||||
push ax
|
||||
mov ax,es:[di]
|
||||
push ax
|
||||
DB 0CBh
|
||||
suite:
|
||||
popad
|
||||
pop gs fs es ds
|
||||
ret
|
||||
|
||||
Sendram:
|
||||
push ax cx si ds
|
||||
mov si,es:[di]
|
||||
mov ax,es:[di+2]
|
||||
mov ds,ax
|
||||
mov cx,es:[di+4]
|
||||
call sendlptblock
|
||||
pop ds si cx ax
|
||||
ret
|
||||
|
||||
receiveram:
|
||||
sendreg:
|
||||
receivereg:
|
||||
|
||||
sendport:
|
||||
push ax cx dx si
|
||||
mov dx,es:[di]
|
||||
in ax,dx
|
||||
mov cx,2
|
||||
mov si,offset tempblock
|
||||
mov ds:[si],ax
|
||||
call sendlptblock
|
||||
pop si dx cx ax
|
||||
ret
|
||||
|
||||
receiveport:
|
||||
push ax dx
|
||||
mov dx,es:[di]
|
||||
mov ax,es:[di+2]
|
||||
out dx,ax
|
||||
pop dx ax
|
||||
ret
|
||||
|
||||
tempblock db 25 dup (0)
|
||||
|
||||
;---------Segment Adress-----------
|
||||
Bios equ 040h
|
||||
;---------Offset Adress------------
|
||||
Lptadr equ 008h
|
||||
Timer equ 06Ch
|
||||
;---------Constant-----------------
|
||||
onesec equ 18
|
||||
tensec equ 182
|
||||
Ack equ 00
|
||||
Nack equ 0FFh
|
||||
maxtry equ 10
|
||||
|
||||
Initlpt:
|
||||
push ax ecx
|
||||
call StartTimer
|
||||
cmp cs:emettor,0
|
||||
je receptinit
|
||||
mov al,10000b
|
||||
call SetLptOut
|
||||
waitinit1:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorinit
|
||||
call getlptIn
|
||||
cmp al,00000b
|
||||
jnz waitinit1
|
||||
jmp endinit
|
||||
receptinit:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorinit
|
||||
call getlptIn
|
||||
cmp al,00000b
|
||||
jnz receptinit
|
||||
mov al,10000b
|
||||
call SetLptOut
|
||||
endinit:
|
||||
clc
|
||||
pop ecx ax
|
||||
ret
|
||||
errorinit:
|
||||
stc
|
||||
pop ecx ax
|
||||
ret
|
||||
|
||||
|
||||
;-Envoie DL (dh) JNE si problŠme JNC error timeout
|
||||
Sendlpt:
|
||||
push ax bx ecx
|
||||
call StartTimer
|
||||
mov dh,dl
|
||||
mov al,dl
|
||||
and al,0Fh
|
||||
call SetLptOut
|
||||
waitSend:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorsend
|
||||
call getlptIn
|
||||
bt ax,4
|
||||
jnc waitsend
|
||||
and al,0Fh
|
||||
mov bl,al
|
||||
call StartTimer ;/////
|
||||
mov al,dh
|
||||
shr al,4
|
||||
or al,10000b
|
||||
call SetLptOut
|
||||
waitSend2:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorsend
|
||||
call getlptIn
|
||||
bt ax,4
|
||||
jc waitsend2
|
||||
and al,0Fh
|
||||
shl al,4
|
||||
add bl,al
|
||||
cmp dl,bl
|
||||
pop ecx bx ax
|
||||
clc
|
||||
ret
|
||||
errorsend:
|
||||
pop ecx bx ax
|
||||
stc
|
||||
ret
|
||||
|
||||
|
||||
;-Re‡ois DL (dh)
|
||||
Receivelpt:
|
||||
push ax bx ecx
|
||||
call StartTimer
|
||||
waitreceive:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorreceive
|
||||
call getlptIn
|
||||
bt ax,4
|
||||
jnc waitreceive
|
||||
and al,0Fh
|
||||
mov dl,al
|
||||
call SetLptOut
|
||||
call StartTimer ;/////
|
||||
waitreceive2:
|
||||
call EndTimer
|
||||
cmp cx,cs:timeout
|
||||
ja errorreceive
|
||||
call getlptIn
|
||||
bt ax,4
|
||||
jc waitreceive2
|
||||
and al,0Fh
|
||||
mov dh,al
|
||||
shl dh,4
|
||||
add dl,dh
|
||||
or al,10000b
|
||||
call SetlptOut
|
||||
clc
|
||||
pop ecx bx ax
|
||||
ret
|
||||
errorreceive:
|
||||
stc
|
||||
pop ecx bx ax
|
||||
ret
|
||||
|
||||
;-AX
|
||||
SetTimeout:
|
||||
mov cs:Timeout,dx
|
||||
ret
|
||||
|
||||
timeout dw tensec
|
||||
|
||||
getTimeout:
|
||||
mov dx,cs:Timeout
|
||||
ret
|
||||
|
||||
SetEmettor:
|
||||
mov cs:Emettor,1
|
||||
ret
|
||||
|
||||
Emettor db 0
|
||||
|
||||
SetReceptor:
|
||||
mov cs:Emettor,0
|
||||
ret
|
||||
|
||||
;->bx Nøport->Adresse dx
|
||||
GetLpt:
|
||||
push ax bx ds
|
||||
mov ax,bios
|
||||
mov ds,ax
|
||||
dec bx
|
||||
shl bx,1
|
||||
mov dx,ds:[Lptadr+bx]
|
||||
mov cs:lpt,dx
|
||||
pop ds bx ax
|
||||
ret
|
||||
lpt dw 0
|
||||
|
||||
;->bx Nøport->Adresse dx
|
||||
GetFirstLpt:
|
||||
push ax ds
|
||||
mov ax,bios
|
||||
mov ds,ax
|
||||
xor bx,bx
|
||||
findlpt:
|
||||
mov dx,ds:[Lptadr+bx]
|
||||
cmp dx,0
|
||||
jne oklpt
|
||||
add bx,2
|
||||
cmp bx,4
|
||||
jbe findlpt
|
||||
oklpt:
|
||||
mov cs:lpt,dx
|
||||
pop ds ax
|
||||
ret
|
||||
|
||||
;->
|
||||
StartTimer:
|
||||
push ax ecx ds
|
||||
mov ax,Bios
|
||||
mov ds,ax
|
||||
mov ecx,ds:[timer]
|
||||
mov cs:times,ecx
|
||||
pop ds ecx ax
|
||||
ret
|
||||
times dd 0
|
||||
|
||||
;->Ecx time elapsed
|
||||
EndTimer:
|
||||
push ax ds
|
||||
mov ax,Bios
|
||||
mov ds,ax
|
||||
mov ecx,ds:[timer]
|
||||
sub ecx,cs:times
|
||||
pop ds ax
|
||||
ret
|
||||
|
||||
;->
|
||||
GetLptOut:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
in al,dx
|
||||
pop dx
|
||||
ret
|
||||
|
||||
GetLptIn:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
inc dx
|
||||
in al,dx
|
||||
shr al,3
|
||||
pop dx
|
||||
ret
|
||||
|
||||
GetLptInOut:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
add dx,2
|
||||
in al,dx
|
||||
and al,11111b
|
||||
pop dx
|
||||
ret
|
||||
|
||||
SetLptOut:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
out dx,al
|
||||
pop dx
|
||||
ret
|
||||
|
||||
SetLptIn:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
inc dx
|
||||
out dx,al
|
||||
pop dx
|
||||
ret
|
||||
|
||||
SetLptInOut:
|
||||
push dx
|
||||
mov dx,cs:lpt
|
||||
add dx,2
|
||||
out dx,al
|
||||
pop dx
|
||||
ret
|
||||
|
||||
;R‚alise un checksum 8 bits sur donn‚es DS:SI, nb CX r‚sultat dans dl
|
||||
Checksum8:
|
||||
push cx si
|
||||
check:
|
||||
add dl,[si]
|
||||
inc si
|
||||
dec cx
|
||||
jnz check
|
||||
pop si cx
|
||||
ret
|
||||
|
||||
;DS:SI pointeur sur donn‚es, CX nombres de donn‚es, AL token
|
||||
SendLptBlock:
|
||||
push ax bx cx edx si edi bp
|
||||
mov dx,cx
|
||||
shl edx,16
|
||||
mov dh,al
|
||||
call checksum8
|
||||
mov edi,edx
|
||||
xor dh,dh
|
||||
mov bp,dx
|
||||
mov ah,maxtry
|
||||
retry:
|
||||
mov bl,4
|
||||
xor al,al
|
||||
header:
|
||||
mov dx,di
|
||||
call sendlpt
|
||||
setne al
|
||||
jc outt
|
||||
rol edi,8
|
||||
dec bl
|
||||
jnz header
|
||||
cmp al,0
|
||||
jne notgood
|
||||
mov dl,ACK
|
||||
jmp allsend
|
||||
notgood:
|
||||
mov dl,NACK
|
||||
allsend:
|
||||
call sendlpt
|
||||
setne al
|
||||
jc outt
|
||||
cmp al,0
|
||||
je okheader
|
||||
dec ah
|
||||
jnz retry
|
||||
jmp outt
|
||||
okheader:
|
||||
cmp cx,0
|
||||
je endoftrans
|
||||
mov di,maxtry
|
||||
retry2:
|
||||
mov bx,cx
|
||||
xor ax,ax
|
||||
body:
|
||||
mov dl,[si+bx-1]
|
||||
add ah,dl
|
||||
call sendlpt
|
||||
setne al
|
||||
jc outt
|
||||
dec bx
|
||||
jnz body
|
||||
cmp al,0
|
||||
jne notgood2
|
||||
mov dl,ACK
|
||||
jmp allisend
|
||||
notgood2:
|
||||
mov dl,NACK
|
||||
allisend:
|
||||
call sendlpt
|
||||
setne al
|
||||
jc outt
|
||||
cmp al,0
|
||||
je endoftrans
|
||||
dec di
|
||||
jnz retry2
|
||||
outt:
|
||||
stc
|
||||
endoftrans:
|
||||
mov al,ah
|
||||
xor ah,ah
|
||||
cmp bp,ax
|
||||
pop bp edi si edx cx bx ax
|
||||
ret
|
||||
|
||||
;Receptionne en es:di les donn‚es au nombres de CX token AL (AH) (ECX)
|
||||
receiveLptBlock:
|
||||
push bx dx si bp
|
||||
mov ah,maxtry
|
||||
retrye:
|
||||
mov bl,4
|
||||
headere:
|
||||
call receivelpt
|
||||
jc outte
|
||||
mov cl,dl
|
||||
rol ecx,8
|
||||
dec bl
|
||||
jnz headere
|
||||
call receivelpt
|
||||
jc outte
|
||||
cmp dl,ACK
|
||||
je okheadere
|
||||
dec ah
|
||||
jnz retrye
|
||||
jmp outte
|
||||
okheadere:
|
||||
mov al,ch
|
||||
xor ch,ch
|
||||
mov bp,cx
|
||||
rol ecx,16
|
||||
cmp cx,0
|
||||
je endoftranse
|
||||
mov si,maxtry
|
||||
retrye2:
|
||||
mov bx,cx
|
||||
xor ah,ah
|
||||
bodye:
|
||||
call receivelpt
|
||||
jc outte
|
||||
mov es:[di+bx-1],dl
|
||||
add ah,dl
|
||||
dec bx
|
||||
jnz bodye
|
||||
call receivelpt
|
||||
jc outte
|
||||
cmp dl,ACK
|
||||
je endoftranse
|
||||
dec si
|
||||
jnz retrye2
|
||||
outte:
|
||||
stc
|
||||
endoftranse:
|
||||
mov bl,ah
|
||||
xor bh,bh
|
||||
cmp bp,bx
|
||||
pop bp si dx bx
|
||||
ret
|
||||
video db 0
|
||||
end start
|
|
@ -0,0 +1,327 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
org 0100h
|
||||
start:
|
||||
jmp tsr
|
||||
drv db 'MOUSE',0
|
||||
Tsr:
|
||||
cli
|
||||
cmp ax,1234h
|
||||
jne nomore
|
||||
mov ax,4321h
|
||||
jmp itsok
|
||||
nomore:
|
||||
push bx ax
|
||||
mov ah,4
|
||||
mov bh,0
|
||||
int 50h
|
||||
mov bl,al
|
||||
pop ax
|
||||
cmp byte ptr cs:isact,1
|
||||
je nottest
|
||||
mov cs:isact,1
|
||||
and bl,10000b
|
||||
cmp bl,16
|
||||
jae react
|
||||
mov bl,ah
|
||||
xor bh,bh
|
||||
shl bx,1
|
||||
mov bx,cs:[bx].tables
|
||||
mov cs:current,bx
|
||||
pop bx
|
||||
call cs:current
|
||||
itsok:
|
||||
jnc noerror
|
||||
push bp
|
||||
mov bp,sp
|
||||
or byte ptr [bp+6],1b
|
||||
pop bp
|
||||
mov ax,cs
|
||||
shl eax,16
|
||||
mov ax,cs:current
|
||||
jmp endofint
|
||||
noerror:
|
||||
push bp
|
||||
mov bp,sp
|
||||
and byte ptr [bp+6],0FEh
|
||||
pop bp
|
||||
endofint:
|
||||
mov cs:isact,0
|
||||
sti
|
||||
iret
|
||||
nottest:
|
||||
pop bx
|
||||
jmp endofint
|
||||
current dw 0
|
||||
tables dw cmdmouse
|
||||
dw cmdmouse2
|
||||
dw detectmouse
|
||||
dw getmouse
|
||||
dw getmousescreen
|
||||
dw configmouse
|
||||
|
||||
isact db 0
|
||||
|
||||
;Envoie une commande AL … la souris via controleur clavier
|
||||
cmdmouse:
|
||||
push ax
|
||||
videbuff1:
|
||||
in al, 64h
|
||||
and al, 10b
|
||||
jne videbuff1
|
||||
mov al, 00d4h
|
||||
out 64h, al
|
||||
videbuff2:
|
||||
in al, 64h
|
||||
and al, 10b
|
||||
jne videbuff2
|
||||
pop ax
|
||||
out 60h, al
|
||||
in al, 60h
|
||||
ret
|
||||
|
||||
;Envoie une commande2 AL … la souris via controleur clavier carry=nomouse
|
||||
cmdmouse2:
|
||||
push ax
|
||||
videbuff21:
|
||||
in al, 64h
|
||||
and al, 10b
|
||||
jne videbuff21
|
||||
mov al, 0060h
|
||||
out 64h, al
|
||||
videbuff22:
|
||||
in al, 64h
|
||||
and al, 10b
|
||||
jne videbuff22
|
||||
pop ax
|
||||
out 60h, al
|
||||
in al, 60h
|
||||
ret
|
||||
|
||||
Detectmouse:
|
||||
push ax cx
|
||||
mov al, 0a8h ;AUX enable
|
||||
out 64h, al
|
||||
mov al, 0f3h ;Set sample
|
||||
call cmdmouse
|
||||
mov al, 100 ;Set sample
|
||||
call cmdmouse
|
||||
mov al, 0e8h ;Set resolution
|
||||
call cmdmouse
|
||||
mov al, 01 ;Set resolution
|
||||
call cmdmouse
|
||||
mov al, 0e7h ;Set scale 2:1
|
||||
call cmdmouse
|
||||
mov al, 0f4h ;Enable device
|
||||
call cmdmouse
|
||||
mov al, 47h ;Interruption ON
|
||||
call cmdmouse2
|
||||
mov cx, 1024
|
||||
testmouse:
|
||||
in al, 60h ;Lecture du port de donn‚es
|
||||
cmp al, 250 ;Test si il y a une souris
|
||||
je okmouse
|
||||
dec cx
|
||||
jnz testmouse
|
||||
stc
|
||||
jmp endoftest
|
||||
okmouse:
|
||||
clc
|
||||
endoftest:
|
||||
pop cx ax
|
||||
ret
|
||||
|
||||
;envoie en bx,cx les coordonn‚es et en dl les boutons
|
||||
getmouse:
|
||||
mov bx,cs:rx
|
||||
mov cx,cs:ry
|
||||
mov dl,cs:button
|
||||
sub dl,8
|
||||
and dl,0Fh
|
||||
clc
|
||||
ret
|
||||
|
||||
;envoie en di les coordonn‚es ecran et en dl les boutons
|
||||
getmousescreen:
|
||||
mov di,cs:xy
|
||||
mov dl,cs:button
|
||||
sub dl,8
|
||||
and dl,0Fh
|
||||
clc
|
||||
ret
|
||||
|
||||
|
||||
;configure la rapidit‚ dans cl et dans ah,al sphŠre x et y
|
||||
Configmouse:
|
||||
mov cs:speed,cl
|
||||
mov cs:spherex,ah
|
||||
mov cs:spherey,al
|
||||
ret
|
||||
|
||||
Button db 0
|
||||
rx dw 0
|
||||
ry dw 0
|
||||
VX db 0
|
||||
VY db 0
|
||||
X dw 7FFFh
|
||||
Y dw 7FFFh
|
||||
speed db 6
|
||||
spherex db 0
|
||||
spherey db 0
|
||||
count db 0
|
||||
error db 0
|
||||
xy dw 0
|
||||
old db 0
|
||||
;Gestionnaire de souris PS/2
|
||||
react:
|
||||
push ax bx cx dx di ds es
|
||||
push cs
|
||||
pop ds
|
||||
in al, 60h
|
||||
cmp error, 1
|
||||
je gest1
|
||||
cmp count, 1
|
||||
je gest1
|
||||
cmp count, 2
|
||||
je gest2
|
||||
cmp count, 3
|
||||
je gest3
|
||||
|
||||
gest1:
|
||||
mov count, 2
|
||||
mov Button, al
|
||||
and al, 00001000b
|
||||
cmp al, 8
|
||||
je gest1end
|
||||
mov error, 1
|
||||
jmp gest1end2
|
||||
gest1end:
|
||||
mov error, 0
|
||||
gest1end2:
|
||||
mov count, 2
|
||||
jmp endgest
|
||||
gest2:
|
||||
mov count, 3
|
||||
mov VX, al
|
||||
jmp endgest
|
||||
gest3:
|
||||
mov count, 1
|
||||
mov VY, al
|
||||
jmp endgest
|
||||
endgest:
|
||||
cmp error,1
|
||||
je errormouse
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
mov cl,speed
|
||||
movsx bx,VY
|
||||
shl bx,cl
|
||||
cmp spherey,0
|
||||
jne nolimity
|
||||
xor ah,ah
|
||||
mov al,[di]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text4
|
||||
shl ax,3
|
||||
text4:
|
||||
dec ax
|
||||
cmp bx,0
|
||||
jg decy
|
||||
cmp ry,ax
|
||||
jae noaddy
|
||||
jmp nolimity
|
||||
decy:
|
||||
cmp ry,0
|
||||
je noaddy
|
||||
nolimity:
|
||||
sub y,bx
|
||||
noaddy:
|
||||
movsx bx,VX
|
||||
shl bx,cl
|
||||
cmp spherex,0
|
||||
jne nolimitx
|
||||
xor ah,ah
|
||||
mov al,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text5
|
||||
shl ax,3
|
||||
text5:
|
||||
dec ax
|
||||
cmp bx,0
|
||||
jl decx
|
||||
cmp rx,ax
|
||||
jae noaddx
|
||||
jmp nolimitx
|
||||
decx:
|
||||
cmp rx,0
|
||||
je noaddx
|
||||
nolimitx:
|
||||
add x,bx
|
||||
noaddx:
|
||||
mov ax,x
|
||||
mov bx,0FFFFh
|
||||
xor ch,ch
|
||||
mov cl,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text1
|
||||
shl cx,3
|
||||
text1:
|
||||
mul cx
|
||||
div bx
|
||||
mov rx,ax
|
||||
mov ax,y
|
||||
xor ch,ch
|
||||
mov cl,[di]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text2
|
||||
shl cx,3
|
||||
text2:
|
||||
mul cx
|
||||
div bx
|
||||
mov ry,ax
|
||||
xor ch,ch
|
||||
mov cl,[di+1]
|
||||
cmp byte ptr [di+7],4
|
||||
jbe text3
|
||||
shl cx,3
|
||||
text3:
|
||||
mul cx
|
||||
add ax,rx
|
||||
cmp byte ptr [di+7],4
|
||||
mov di,ax
|
||||
jbe textpoint
|
||||
mov ax,0A000h
|
||||
mov es,ax
|
||||
jmp graphpoint
|
||||
textpoint:
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
shl di,1
|
||||
inc di
|
||||
graphpoint:
|
||||
mov bx,xy
|
||||
cmp byte ptr es:[bx],070h
|
||||
jne waschanged
|
||||
mov al,old
|
||||
mov byte ptr es:[bx],al
|
||||
waschanged:
|
||||
mov xy,di
|
||||
mov al,es:[di]
|
||||
mov old,al
|
||||
mov byte ptr es:[di],070h
|
||||
mov al, 20h
|
||||
out 0a0h, al
|
||||
out 20h, al
|
||||
errormouse:
|
||||
pop es ds di dx cx bx ax
|
||||
mov cs:isact,0
|
||||
pop bx
|
||||
iret
|
||||
infos db 40 dup (0)
|
||||
|
||||
end start
|
|
@ -0,0 +1,897 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
include ..\include\fat.h
|
||||
|
||||
start:
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
pop ds
|
||||
pop es
|
||||
pop fs
|
||||
pop gs
|
||||
;xor ax,ax
|
||||
;mov ds,ax
|
||||
;mov si,7C00h
|
||||
mov si,offset eepop
|
||||
mov di,offset myboot
|
||||
mov cx,type bootsector
|
||||
push cs
|
||||
pop es
|
||||
rep movsb
|
||||
jmp noone
|
||||
|
||||
eepop db 0,0,0
|
||||
bootdb db 'COS2000A' ;Fabricant + n°série Formatage
|
||||
sizec dw 512 ;octet/secteur
|
||||
db 1 ;secteur/cluster
|
||||
reserv dw 1 ;secteur reserv‚
|
||||
nbfat db 2 ;nb de copie de la FAT
|
||||
nbfit dw 224 ;taille rep racine
|
||||
allclu dw 2880 ;nb secteur du volume si < 32 még
|
||||
db 0F0h ;Descripteur de média
|
||||
fatsize dw 9 ;secteur/FAT
|
||||
nbtrack dw 18 ;secteur/piste
|
||||
head dw 2 ;nb de tˆteb de lecture/écriture
|
||||
hidden dd 0 ;nombre de secteur cach‚s
|
||||
dd 0 ;si nbsecteur = 0 nbsect ; the number of sectors
|
||||
bootdrv db 0 ;Lecteur de d‚marrage
|
||||
bootsig db 0 ;NA
|
||||
db 29h ;boot signature 29h
|
||||
bootsig2 dd 01020304h ;no de serie
|
||||
pope db 'COS2000 ' ;nom de volume
|
||||
db 'FAT12 ' ;FAT
|
||||
|
||||
|
||||
xor ax,ax
|
||||
mov es,ax
|
||||
mov di,1Eh*4
|
||||
lds si,es:[di]
|
||||
mov es:[di],cs
|
||||
mov word ptr es:[di],offset myDPT
|
||||
push cs
|
||||
pop es
|
||||
mov cx,type DPT
|
||||
rep movsb
|
||||
mov ax,cs:[Bootsector.SectorsPerTrack]
|
||||
mov es:[DPT.SectorPerTracks],al
|
||||
noone:
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
push cs
|
||||
pop ds
|
||||
pop es
|
||||
pop fs
|
||||
pop gs
|
||||
|
||||
call InitDrive
|
||||
|
||||
mov si,offset premice
|
||||
mov bx,7
|
||||
call showstr
|
||||
mov si,offset next
|
||||
call showstr
|
||||
mov si,offset conf
|
||||
call showstr
|
||||
mov al,0
|
||||
mov cx,2000
|
||||
mov di,offset loadinglist
|
||||
rep stosb
|
||||
mov di,offset loadinglist
|
||||
call loadfile
|
||||
jc noconfread
|
||||
|
||||
mov si,offset debut
|
||||
mov bx,7
|
||||
call showstr
|
||||
mov bx,500h
|
||||
xor cx,cx
|
||||
mov si,offset loadinglist
|
||||
suiteloading:
|
||||
call readline
|
||||
jc noconfload
|
||||
push bx si
|
||||
mov bl,7
|
||||
mov si,offset next
|
||||
call showstr
|
||||
pop si bx
|
||||
call showstr
|
||||
mov dx,bx
|
||||
push bx si
|
||||
mov bx,7
|
||||
mov si,offset address
|
||||
call showstr
|
||||
mov cx,16
|
||||
call showhex
|
||||
mov si,offset addressend
|
||||
call showstr
|
||||
xor bp,bp
|
||||
mov dx,ax
|
||||
cmp ax,8h
|
||||
jb noadder
|
||||
cmp ax,10h
|
||||
ja noadder
|
||||
mov bp,1
|
||||
sub dx,8
|
||||
jmp haveirq
|
||||
noadder:
|
||||
cmp ax,70h
|
||||
jb noadd
|
||||
cmp ax,78h
|
||||
ja noadd
|
||||
mov bp,1
|
||||
sub dx,68h
|
||||
haveirq:
|
||||
mov si,offset irqs
|
||||
call showstr
|
||||
mov cx,4
|
||||
call showhex
|
||||
mov si,offset irqsend
|
||||
call showstr
|
||||
noadd:
|
||||
pop si bx
|
||||
cmp bp,1
|
||||
jne install
|
||||
call replacehandler
|
||||
jmp suites
|
||||
install:
|
||||
call installhandler
|
||||
suites:
|
||||
jc nohandlerload
|
||||
add bx,0F00h
|
||||
inc cx
|
||||
call nextline
|
||||
jnz suiteloading
|
||||
|
||||
mov si,offset fini
|
||||
mov bl,7
|
||||
call showstr
|
||||
mov si,offset next
|
||||
call showstr
|
||||
mov si,offset prompt
|
||||
call showstr
|
||||
mov ax,6000h
|
||||
mov es,ax
|
||||
push ax
|
||||
mov di,0100h
|
||||
push di
|
||||
call loadfile
|
||||
jc nopromptload
|
||||
push 7202h
|
||||
popf
|
||||
push es
|
||||
push es
|
||||
push es
|
||||
pop ds
|
||||
pop fs
|
||||
pop gs
|
||||
db 0CBh
|
||||
|
||||
nopromptload:
|
||||
mov si,offset prompte
|
||||
mov bl,4
|
||||
call showstr
|
||||
jmp erroron
|
||||
|
||||
nohandlerload:
|
||||
mov si,offset handlere
|
||||
mov bl,4
|
||||
call showstr
|
||||
jmp erroron
|
||||
|
||||
noconfread:
|
||||
mov si,offset confee
|
||||
mov bl,4
|
||||
call showstr
|
||||
jmp erroron
|
||||
|
||||
noconfload:
|
||||
mov di,si
|
||||
mov si,offset confe
|
||||
mov bl,4
|
||||
call showstr
|
||||
mov dx,cx
|
||||
mov cx,16
|
||||
call showhex
|
||||
mov si,offset confe2
|
||||
mov bl,3
|
||||
call showstr
|
||||
mov dx,di
|
||||
mov cx,16
|
||||
call showhex
|
||||
|
||||
erroron:
|
||||
push cs
|
||||
pop ds
|
||||
mov si,offset erreur
|
||||
mov bl,4
|
||||
call showstr
|
||||
mov ax,0
|
||||
int 16h
|
||||
push 0FFFFh
|
||||
push 0
|
||||
db 0CBh
|
||||
|
||||
address db ' [',0
|
||||
addressend db ':0100] ',0
|
||||
irqs db ' (IRQ ',0
|
||||
irqsend db ')',0
|
||||
prompt db 'commande.exe',0
|
||||
conf db 'systeme.ini',0
|
||||
premice db 0Dh,0Ah,'Chargement du fichier de configuration:',0
|
||||
debut db 0Dh,0Ah,'Chargement des pilotes systeme:',0
|
||||
fini db 0Dh,0Ah,'Chargement de l''interpreteur de commande:',0
|
||||
next db 0Dh,0Ah,' - ',0
|
||||
prompte db 0Dh,0Ah,'Erreur lors du chargement de l''interpreteur',0
|
||||
handlere db 0Dh,0Ah,'Erreur lors du chargement des pilotes',0
|
||||
confe db 0Dh,0Ah,'Erreur dans le fichier de configuration a la ligne ',0
|
||||
confee db 0Dh,0Ah,'Erreur de lecture du fichier de configuration',0
|
||||
confe2 db ' caractere ',0
|
||||
erreur db 0Dh,0Ah,'Pressez une touche pour redemarrer...',0
|
||||
|
||||
;==positionne si sur l'entrée suivante de la loading liste jusqu'a equal
|
||||
nextline:
|
||||
push ax cx di
|
||||
mov di,si
|
||||
mov al,0Ah
|
||||
mov cx,20
|
||||
repnz scasb
|
||||
mov si,di
|
||||
cmp byte ptr [di],0
|
||||
pop di cx ax
|
||||
ret
|
||||
|
||||
;==Lit la loading list et initialise SI(Fichier) BX(adresse) AX(interruption)
|
||||
readline:
|
||||
push cx dx di es
|
||||
push ds
|
||||
pop es
|
||||
;Voir taille de la ligne -> DX
|
||||
mov di,si
|
||||
mov al,0Dh
|
||||
mov cx,20
|
||||
repne scasb
|
||||
sub cx,20
|
||||
neg cx
|
||||
mov dx,cx
|
||||
;N° interruption ??
|
||||
mov di,si
|
||||
mov al,'('
|
||||
repne scasb
|
||||
jne noaddr
|
||||
;Non, je recherche l'int positionnement parenthese de fin
|
||||
mov al,')'
|
||||
repne scasb
|
||||
jne errorlist
|
||||
;Je lit l'interruption dans DL
|
||||
xor dl,dl
|
||||
xor cx,cx
|
||||
dec di
|
||||
readingint:
|
||||
dec di
|
||||
mov al,[di]
|
||||
cmp al,'('
|
||||
je finishint
|
||||
call eval
|
||||
jc errorlist
|
||||
shl ax,cl
|
||||
add dl,al
|
||||
add cx,4
|
||||
cmp cx,8
|
||||
ja errorlist
|
||||
jmp readingint
|
||||
noaddr:
|
||||
dec di
|
||||
mov dl,0
|
||||
finishint:
|
||||
;mise d'un 0 a la fin du nom
|
||||
mov byte ptr [di],0
|
||||
mov al,dl
|
||||
pop es di dx cx
|
||||
clc
|
||||
ret
|
||||
errorlist:
|
||||
sub di,si
|
||||
mov si,di
|
||||
pop es di dx cx
|
||||
stc
|
||||
ret
|
||||
|
||||
|
||||
;return carry si pas hexa pour al et renvoie dans al la valeur décimale
|
||||
eval:
|
||||
push si
|
||||
xor si,si
|
||||
searchex:
|
||||
cmp al,cs:[si+offset hexas]
|
||||
je endsearchex
|
||||
inc si
|
||||
cmp si,15
|
||||
jbe searchex
|
||||
pop si
|
||||
stc
|
||||
ret
|
||||
endsearchex:
|
||||
mov ax,si
|
||||
pop si
|
||||
clc
|
||||
ret
|
||||
|
||||
hexas db '0123456789ABCDEF',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,0Eh
|
||||
and bx,1111b
|
||||
Hexaize:
|
||||
rol edx,4
|
||||
mov si,dx
|
||||
and si,1111b
|
||||
mov al,[si+offset tab]
|
||||
int 10h
|
||||
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 si
|
||||
again:
|
||||
lodsb
|
||||
or al,al
|
||||
jz fin
|
||||
mov ah,0Eh
|
||||
and bx,1111b
|
||||
int 10h
|
||||
jmp again
|
||||
fin:
|
||||
pop si bx ax
|
||||
ret
|
||||
|
||||
;================================================
|
||||
;Routine de gestion de handler
|
||||
;================================================
|
||||
|
||||
;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
|
||||
call loadfile
|
||||
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
|
||||
call loadfile
|
||||
jc insh
|
||||
mov bx,ax
|
||||
call setint
|
||||
insh:
|
||||
pop es di cx bx
|
||||
ret
|
||||
|
||||
;met es:di le handle de l'int bx
|
||||
setint:
|
||||
push ax bx ds
|
||||
cli
|
||||
shl bx,2
|
||||
xor ax,ax
|
||||
mov ds,ax
|
||||
mov ds:[bx],di
|
||||
mov ds:[bx+2],es
|
||||
pop ds bx ax
|
||||
sti
|
||||
ret
|
||||
|
||||
;met ds:si le handle de l'int bx
|
||||
getint:
|
||||
push ax bx es
|
||||
shl bx,2
|
||||
xor ax,ax
|
||||
mov es,ax
|
||||
mov si,es:[bx]
|
||||
mov ds,es:[bx+2]
|
||||
pop es bx ax
|
||||
ret
|
||||
|
||||
;================================================
|
||||
;Routine de gestion de systeme de fichier FAT12
|
||||
;================================================
|
||||
|
||||
;DPT disquette
|
||||
mydpt DPT ?
|
||||
|
||||
;Secteur de boot
|
||||
myboot bootSector ?
|
||||
|
||||
;Données Calculée
|
||||
clustersize dw 0
|
||||
TracksPerHead dw 0
|
||||
DriveSize dd 0
|
||||
AdressBoot dw 0
|
||||
AdressFat dw 0
|
||||
AdressParent dw 0
|
||||
AdressData dw 0
|
||||
AddingValue dw 0
|
||||
CurrentDir dw 0 ;En cluster
|
||||
CurrentDirStr db 128 dup (0)
|
||||
|
||||
;Pour recherches
|
||||
EntryPlace dw 0 ;En octet
|
||||
AdressDirectory dw 0 ;En cluster
|
||||
firstsearch dw 1 ;Premiere requete ?
|
||||
|
||||
getfat:
|
||||
push ax bx dx si
|
||||
mov ax,cx
|
||||
mov bx,ax
|
||||
and bx,0000000000000001b
|
||||
shr ax,1
|
||||
mov cx,3
|
||||
mul cx
|
||||
mov si,offset bufferfat
|
||||
add si,ax
|
||||
cmp bx,0h
|
||||
jnz evenfat
|
||||
oddfat:
|
||||
mov dx,cs:[si]
|
||||
and dx,0FFFh
|
||||
mov cx,dx
|
||||
jmp endfat
|
||||
evenfat:
|
||||
mov dx,cs:[si+1]
|
||||
and dx,0FFF0h
|
||||
shr dx,4
|
||||
mov cx,dx
|
||||
endfat:
|
||||
cmp dx,0FF0h
|
||||
jbe nocarry
|
||||
stc
|
||||
pop si dx bx ax
|
||||
ret
|
||||
nocarry:
|
||||
clc
|
||||
pop si dx bx ax
|
||||
ret
|
||||
|
||||
;============loadfile (Fonction 4)===============
|
||||
;Charge le fichier ds:si en es:di ->ecx taille
|
||||
;-> AH=4
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
loadfile:
|
||||
push eax bx di
|
||||
push es di
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset tempfit
|
||||
call searchfile
|
||||
pop di es
|
||||
jne errorload
|
||||
jc errorload
|
||||
mov cx,cs:tempfit.FileGroup
|
||||
mov eax,cs:tempfit.FileSize
|
||||
call loadway
|
||||
jc errorload
|
||||
clc
|
||||
;mov ecx,eax
|
||||
pop di bx eax
|
||||
ret
|
||||
errorload:
|
||||
stc
|
||||
mov ecx,0
|
||||
pop di bx eax
|
||||
ret
|
||||
|
||||
tempfit db 32 dup (0)
|
||||
|
||||
;=============SearchFile (Fonction 10)===============
|
||||
;Renvois dans ES:DI la fit du fichier DS:SI et non equal si pas existant
|
||||
;-> AH=10
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
SearchFile:
|
||||
push ax cx ds si di es
|
||||
call uppercase
|
||||
push ds si
|
||||
call findfirstfilez
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
pop si ds
|
||||
jc errorsearch
|
||||
jmp founded
|
||||
nextsearch:
|
||||
push ds si
|
||||
call findnextfilez
|
||||
push ds
|
||||
pop es
|
||||
mov di,si
|
||||
pop si ds
|
||||
founded:
|
||||
cmp byte ptr cs:[di],0
|
||||
je notgood
|
||||
cmp byte ptr cs:[di+FileAttr],0Fh
|
||||
je nextsearch
|
||||
call cmpnames
|
||||
jc nextsearch
|
||||
okfound:
|
||||
push cs
|
||||
pop ds
|
||||
mov si,di
|
||||
pop es di
|
||||
push di es
|
||||
mov cx,32
|
||||
rep movsb
|
||||
clc
|
||||
pop es di si ds cx ax
|
||||
ret
|
||||
notgood:
|
||||
cmp si,0FF5h
|
||||
pop es di si ds cx ax
|
||||
ret
|
||||
errorsearch:
|
||||
stc
|
||||
pop es di si ds cx ax
|
||||
ret
|
||||
|
||||
;Transforme la chaine ds:si en maj
|
||||
uppercase:
|
||||
push si ax
|
||||
mov di,si
|
||||
uppercaser:
|
||||
mov al,ds:[si]
|
||||
cmp al,0
|
||||
je enduppercase
|
||||
cmp al,'a'
|
||||
jb nonmaj
|
||||
cmp al,'z'
|
||||
ja nonmaj
|
||||
sub al,'a'-'A'
|
||||
mov ds:[si],al
|
||||
nonmaj:
|
||||
inc si
|
||||
jmp uppercaser
|
||||
enduppercase:
|
||||
clc
|
||||
pop ax si
|
||||
ret
|
||||
|
||||
;Compare le nom ds:si '.' avec es:di
|
||||
CmpNames:
|
||||
push ax cx si di
|
||||
mov cx,8
|
||||
repe cmpsb
|
||||
jne nequal
|
||||
inc si
|
||||
nequal:
|
||||
cmp byte ptr [si-1],'.'
|
||||
jne trynoext
|
||||
mov al,' '
|
||||
rep scasb
|
||||
mov cx,3
|
||||
rep cmpsb
|
||||
jne notequal
|
||||
cmp byte ptr [si],0
|
||||
jne notequal
|
||||
cmp cx,0
|
||||
jl notequal
|
||||
itok:
|
||||
pop di si cx ax
|
||||
ret
|
||||
trynoext:
|
||||
cmp byte ptr [si-1],0
|
||||
jne notequal
|
||||
jmp itok
|
||||
notequal:
|
||||
stc
|
||||
pop di si cx ax
|
||||
ret
|
||||
|
||||
;charge le fichier de de groupe CX et de taille eax
|
||||
LoadWay:
|
||||
push eax bx dx si di ecx ds es
|
||||
cmp eax,0
|
||||
je Zeroload
|
||||
rol eax,16
|
||||
mov dx,ax
|
||||
ror eax,16
|
||||
div cs:clusterSize
|
||||
mov bx,ax
|
||||
cmp bx,1
|
||||
jb adjustlast
|
||||
Loadfat:
|
||||
call readcluster
|
||||
jc noway
|
||||
add di,cs:clusterSize
|
||||
call getfat
|
||||
dec bx
|
||||
jnz loadfat
|
||||
AdjustLast:
|
||||
push es di
|
||||
push cs
|
||||
pop es
|
||||
mov di,offset bufferread
|
||||
mov si,di
|
||||
call Readcluster
|
||||
pop di es
|
||||
jc noway
|
||||
mov cx,dx
|
||||
push cs
|
||||
pop ds
|
||||
rep movsb
|
||||
zeroload:
|
||||
clc
|
||||
pop es ds ecx di si dx bx eax
|
||||
ret
|
||||
noway:
|
||||
stc
|
||||
pop es ds ebp di si dx bx eax
|
||||
ret
|
||||
|
||||
;=============INITDRIVE (Fonction 04H)===============
|
||||
;Initialise le lecteur pour une utilisation ultérieure
|
||||
;-> AH=4
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
InitDrive:
|
||||
push eax bx cx edx di ds es
|
||||
push cs
|
||||
pop ds
|
||||
push cs
|
||||
pop es
|
||||
mov cs:lastseg,0
|
||||
mov cs:lastoff,0
|
||||
mov cs:LastRead,0
|
||||
mov ax,myboot.sectorsize
|
||||
mov bl,myboot.SectorsPerCluster
|
||||
xor bh,bh
|
||||
mul bx
|
||||
mov clustersize,ax
|
||||
mov bx,myboot.HiddenSectorsL
|
||||
adc bx,myboot.HiddenSectorsH
|
||||
mov AdressBoot,bx
|
||||
add bx,myboot.ReservedSectors
|
||||
mov AdressFat,bx
|
||||
xor ax,ax
|
||||
mov al,myboot.FatsPerDrive
|
||||
mul myboot.SectorsPerFat
|
||||
add bx,ax
|
||||
mov AdressParent,bx
|
||||
mov AdressDirectory,bx
|
||||
mov ax,32
|
||||
mul myboot.DirectorySize
|
||||
div myboot.SectorSize
|
||||
add bx,ax
|
||||
mov AdressData,bx
|
||||
sub bx,2
|
||||
mov AddingValue,bx
|
||||
mov ax,myboot.SectorsPerDrive
|
||||
div myboot.SectorsPerTrack
|
||||
xor dx,dx
|
||||
div myboot.HeadsPerDrive
|
||||
mov TracksPerHead,ax
|
||||
xor eax,eax
|
||||
mov ax,myboot.SectorsPerDrive
|
||||
sub ax,AdressData
|
||||
mul myboot.SectorSize
|
||||
shl edx,16
|
||||
add edx,eax
|
||||
mov DriveSize,edx
|
||||
mov CurrentDir,0
|
||||
mov EntryPlace,0
|
||||
mov adressdirectory,0
|
||||
mov firstsearch,1
|
||||
mov currentdirstr,0
|
||||
mov di,offset bufferfat
|
||||
mov dx,myboot.SectorsPerFat
|
||||
mov cx,AdressFat
|
||||
SeeFat:
|
||||
call readsector
|
||||
jc ErrorInit
|
||||
add di,myboot.SectorSize
|
||||
inc cx
|
||||
dec dx
|
||||
jnz seefat
|
||||
clc
|
||||
pop es ds di edx cx bx eax
|
||||
ret
|
||||
ErrorInit:
|
||||
stc
|
||||
pop es ds di edx cx bx eax
|
||||
ret
|
||||
|
||||
;=============FindFirstFile (Fonction 7)==============
|
||||
;Renvois dans ES:DI un bloc d'info
|
||||
;-> AH=7
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
FindFirstFileZ:
|
||||
push cx
|
||||
mov cx,cs:CurrentDir
|
||||
mov cs:AdressDirectory,cx
|
||||
xor cx,cx
|
||||
mov cs:EntryPlace,cx
|
||||
mov cs:firstsearch,1
|
||||
call findnextfileZ
|
||||
pop cx
|
||||
ret
|
||||
|
||||
;=============FindnextFile (Fonction 8)==============
|
||||
;Renvois dans ES:DI un bloc d'info
|
||||
;-> AH=8
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
;fait pointer ds:si sur la prochaine entrée du repertoire courant
|
||||
FindnextFileZ:
|
||||
push ax bx cx es di
|
||||
push cs
|
||||
pop ds
|
||||
mov cx,cs:AdressDirectory
|
||||
mov bx,cs:Entryplace
|
||||
FindnextFileagain:
|
||||
cmp cs:firstsearch,1
|
||||
je first
|
||||
add bx,32
|
||||
cmp bx,cs:clusterSize
|
||||
jb nopop
|
||||
first:
|
||||
mov di,offset bufferentry
|
||||
push cs
|
||||
pop es
|
||||
mov bx,0
|
||||
cmp cs:currentdir,0
|
||||
jne notrootdir
|
||||
cmp cs:firstsearch,1
|
||||
je noaddfirst1
|
||||
inc cx
|
||||
noaddfirst1:
|
||||
add cx,cs:adressparent
|
||||
mov al,myboot.sectorspercluster
|
||||
readroot:
|
||||
call readsector
|
||||
jc notwell
|
||||
add di,myboot.sectorsize
|
||||
dec al
|
||||
jnz readroot
|
||||
sub cx,cs:adressparent
|
||||
jmp nopop
|
||||
notrootdir:
|
||||
cmp cs:firstsearch,1
|
||||
je noaddfirst2
|
||||
call getfat
|
||||
noaddfirst2:
|
||||
jc notwell
|
||||
call readcluster
|
||||
jc notwell
|
||||
nopop:
|
||||
mov cs:firstsearch,0
|
||||
mov si,offset bufferentry
|
||||
add si,bx
|
||||
cmp byte ptr cs:[si],0
|
||||
je notwell
|
||||
mov cs:entryplace,bx
|
||||
mov cs:AdressDirectory,cx
|
||||
cmp byte ptr cs:[si],0E5h
|
||||
je findnextfileagain
|
||||
cmp byte ptr cs:[si+fileattr],28h
|
||||
je findnextfileagain
|
||||
cmp byte ptr cs:[si+fileattr],0Fh
|
||||
je findnextfileagain
|
||||
clc
|
||||
pop di es cx bx ax
|
||||
ret
|
||||
notwell:
|
||||
stc
|
||||
pop di es cx bx ax
|
||||
ret
|
||||
|
||||
|
||||
;=============READCLUSTER (Fonction 14)===============
|
||||
;Lit le secteur CX et le met en es:di
|
||||
;-> AH=14
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
readcluster:
|
||||
push ax bx cx dx di
|
||||
mov ax,cx
|
||||
mov bl,cs:myboot.sectorspercluster
|
||||
xor bh,bh
|
||||
mul bx
|
||||
mov cx,ax
|
||||
add cx,cs:addingvalue
|
||||
readsectors:
|
||||
call readsector
|
||||
jc errorreadincluster
|
||||
add di,cs:myboot.sectorsize
|
||||
inc cx
|
||||
dec bl
|
||||
jnz readsectors
|
||||
clc
|
||||
pop di dx cx bx ax
|
||||
ret
|
||||
errorreadincluster:
|
||||
stc
|
||||
pop di dx cx bx ax
|
||||
ret
|
||||
|
||||
;=============READSECTOR (Fonction 01H)===============
|
||||
;Lit le secteur CX et le met en es:di
|
||||
;-> AH=1
|
||||
;<- Flag Carry si erreur
|
||||
;=====================================================
|
||||
ReadSector:
|
||||
push ax bx cx dx si
|
||||
cmp cx,cs:lastread
|
||||
jne gom
|
||||
mov ax,es
|
||||
cmp cs:lastseg,ax
|
||||
jne gom
|
||||
cmp di,cs:lastoff
|
||||
jne gom
|
||||
jmp done
|
||||
gom:
|
||||
mov cs:lastseg,ax
|
||||
mov cs:lastoff,di
|
||||
mov cs:LastRead,cx
|
||||
mov ax,cx
|
||||
xor dx,dx
|
||||
div cs:myboot.SectorsPerTrack
|
||||
inc dl
|
||||
mov bl,dl
|
||||
xor dx,dx
|
||||
div cs:myboot.HeadsPerDrive
|
||||
mov dh,cs:myboot.bootdrive
|
||||
xchg dl,dh
|
||||
mov cx,ax
|
||||
xchg cl,ch
|
||||
shl cl,6
|
||||
or cl,bl
|
||||
mov bx,di
|
||||
mov SI,4
|
||||
mov AL,1
|
||||
TryAgain:
|
||||
mov AH, 2
|
||||
int 13h
|
||||
jnc Done
|
||||
dec SI
|
||||
jnz TryAgain
|
||||
Done:
|
||||
pop si dx cx bx ax
|
||||
ret
|
||||
|
||||
lastread dw 0
|
||||
lastseg dw 0
|
||||
lastoff dw 0
|
||||
|
||||
bufferread equ $
|
||||
bufferFat equ $+2048
|
||||
bufferentry equ $+2048+2048
|
||||
loadinglist equ $+2048+2048+2048
|
||||
end start
|
|
@ -0,0 +1,7 @@
|
|||
video.sys(47)
|
||||
horloge.sys(8)
|
||||
8259a.sys(50)
|
||||
disque.sys(48)
|
||||
souris.sys(74)
|
||||
clavier.sys(9)
|
||||
heure.sys(8)
|
|
@ -0,0 +1,57 @@
|
|||
lnk_boot = tlink /x
|
||||
asm= tasm /t/m5/zi
|
||||
lnk= tlink /x/t
|
||||
|
||||
all: detect.exe editeur.exe gestion.exe logo.exe pmode.exe souris.exe test.exe verifier.exe volume.exe
|
||||
|
||||
detect.exe: detect.asm
|
||||
$(asm) detect
|
||||
$(lnk) detect
|
||||
ren detect.com detect.exe
|
||||
|
||||
editeur.exe: editeur.asm
|
||||
$(asm) editeur
|
||||
$(lnk) editeur
|
||||
ren editeur.com editeur.exe
|
||||
|
||||
gestion.exe: gestion.asm
|
||||
$(asm) gestion
|
||||
$(lnk) gestion
|
||||
ren gestion.com gestion.exe
|
||||
|
||||
logo.exe: logo.asm
|
||||
$(asm) logo
|
||||
$(lnk) logo
|
||||
ren logo.com logo.exe
|
||||
|
||||
pmode.exe: pmode.asm
|
||||
$(asm) pmode
|
||||
$(lnk) pmode
|
||||
ren pmode.com pmode.exe
|
||||
|
||||
souris.exe: souris.asm
|
||||
$(asm) souris
|
||||
$(lnk) souris
|
||||
ren souris.com souris.exe
|
||||
|
||||
test.exe: test.asm
|
||||
$(asm) test
|
||||
$(lnk) test
|
||||
ren test.com test.exe
|
||||
|
||||
verifier.exe: verifier.asm
|
||||
$(asm) verifier
|
||||
$(lnk) verifier
|
||||
ren verifier.com verifier.exe
|
||||
|
||||
volume.exe: volume.asm
|
||||
$(asm) volume
|
||||
$(lnk) volume
|
||||
ren volume.com volume.exe
|
||||
|
||||
clean:
|
||||
del *.obj
|
||||
del *.exe
|
||||
del *.com
|
||||
del *.sys
|
||||
del *.err
|
After Width: | Height: | Size: 15 KiB |
|
@ -0,0 +1,606 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
include ..\include\pci.h
|
||||
|
||||
start:
|
||||
call cleartext
|
||||
|
||||
call getpciinfos
|
||||
mov pciversion,bx
|
||||
mov nbbus,cl
|
||||
mov pcitype,al
|
||||
|
||||
mov si,offset msg
|
||||
call showstring0
|
||||
call line
|
||||
|
||||
mov si,offset pcivers
|
||||
call showstring0
|
||||
xor edx,edx
|
||||
mov dx,bx
|
||||
xchg dl,dh
|
||||
mov cx,8
|
||||
call showhex
|
||||
mov si,offset poin
|
||||
call showstring0
|
||||
shr dx,8
|
||||
call showhex
|
||||
mov si,offset pcivers2
|
||||
call showstring0
|
||||
call line
|
||||
|
||||
mov si,offset nbbuses
|
||||
call showstring0
|
||||
xor edx,edx
|
||||
mov dl,nbbus
|
||||
inc dl
|
||||
call showint
|
||||
call line
|
||||
|
||||
mov si,offset typesof
|
||||
call showstring0
|
||||
mov di,offset types
|
||||
mov bx,7
|
||||
mov al,pcitype
|
||||
vote:
|
||||
bt ax,bx
|
||||
jnc nowas
|
||||
shl bx,1
|
||||
mov si,[di+bx]
|
||||
call showstring0
|
||||
mov si,offset spac
|
||||
call showstring0
|
||||
shr bx,1
|
||||
nowas:
|
||||
dec bx
|
||||
jns vote
|
||||
call line
|
||||
|
||||
xor ax,ax
|
||||
xor cx,cx
|
||||
mov di,offset infos
|
||||
search:
|
||||
call Getallfunctionsinfos
|
||||
jc stopthis
|
||||
|
||||
push cx di
|
||||
mov si,offset msg1
|
||||
call showstring0
|
||||
mov cx,16
|
||||
xor edx,edx
|
||||
mov dx,[di+pci.device]
|
||||
call showhex
|
||||
mov si,offset msg2
|
||||
call showstring0
|
||||
mov dx,[di+pci.vendor]
|
||||
call showhex
|
||||
mov si,offset msg3
|
||||
call showstring0
|
||||
mov cl,[di+pci.class]
|
||||
mov ch,[di+pci.subclass]
|
||||
mov di,offset temp
|
||||
call getpciclass
|
||||
mov si,di
|
||||
call showstring0
|
||||
mov si,offset poin
|
||||
call showstring0
|
||||
mov di,offset temp
|
||||
call getpcisubclass
|
||||
mov si,di
|
||||
call showstring0
|
||||
call line
|
||||
pop di cx
|
||||
|
||||
jmp noerror
|
||||
noerror:
|
||||
inc ch
|
||||
cmp ch,7
|
||||
jbe search
|
||||
stopthis:
|
||||
xor ch,ch
|
||||
inc cl
|
||||
cmp cl,31
|
||||
jbe search
|
||||
xor cl,cl
|
||||
inc al
|
||||
cmp al,16
|
||||
jbe search
|
||||
ret
|
||||
|
||||
msg3 db ' Classe:',0
|
||||
msg1 db 'Peripherique :',0
|
||||
msg2 db ' Constructeur :',0
|
||||
msg db 'COS2000 hardware detecteur V1.1',0
|
||||
pcivers db 'BIOS PCI version ',0
|
||||
pcivers2 db ' a ete detecte !',0
|
||||
nbbuses db 'Nombre de bus : ',0
|
||||
typesof db 'Caracterisques PCI: ',0
|
||||
poin db '.',0
|
||||
virg db ', ',0
|
||||
spac db ' ',0
|
||||
temp db 128 dup (0)
|
||||
|
||||
types dw config1
|
||||
dw config2
|
||||
dw poin
|
||||
dw poin
|
||||
dw config3
|
||||
dw config4
|
||||
dw poin
|
||||
dw poin
|
||||
|
||||
config1 db 'Config Mechanism 1',0
|
||||
config2 db 'Config Mechanism 2',0
|
||||
config3 db 'Special Cycle Mechanism 1',0
|
||||
config4 db 'Special Cycle Mechanism 2',0
|
||||
|
||||
PciVersion dw 0
|
||||
Nbbus db 0
|
||||
PciType db 0
|
||||
infos db 256 dup (0)
|
||||
|
||||
;fonction 0-7 bus 0-255 device 0-31
|
||||
|
||||
;renvoie en es:di de classe cl
|
||||
getpciclass:
|
||||
push ax cx si di ds es
|
||||
push es
|
||||
push di
|
||||
mov di,cx
|
||||
and di,0FFh
|
||||
shl di,1
|
||||
mov di,[offset classes+di]
|
||||
mov cx,0FFh
|
||||
mov al,0
|
||||
push cs
|
||||
pop es
|
||||
repne scasb
|
||||
sub cx,0FFh
|
||||
neg cx
|
||||
sub di,cx
|
||||
mov si,di
|
||||
push cs
|
||||
pop ds
|
||||
pop di
|
||||
pop es
|
||||
rep movsb
|
||||
pop es ds di si cx ax
|
||||
ret
|
||||
|
||||
;renvoie en es:di la sous-classe de ch et de classe cl
|
||||
getpcisubclass:
|
||||
push ax cx si di ds es
|
||||
push es
|
||||
push di
|
||||
mov di,cx
|
||||
and di,0FFh
|
||||
shl di,1
|
||||
mov di,[offset classesd+di]
|
||||
xchg ch,cl
|
||||
xor ch,ch
|
||||
cmp cx,80h
|
||||
jne suiteac
|
||||
mov di,offset divers
|
||||
jmp found
|
||||
suiteac:
|
||||
shl cx,1
|
||||
add di,cx
|
||||
mov di,[di]
|
||||
found:
|
||||
mov cx,0FFh
|
||||
mov al,0
|
||||
push cs
|
||||
pop es
|
||||
repne scasb
|
||||
sub cx,0FFh
|
||||
neg cx
|
||||
sub di,cx
|
||||
mov si,di
|
||||
push cs
|
||||
pop ds
|
||||
pop di
|
||||
pop es
|
||||
rep movsb
|
||||
pop es ds di si cx ax
|
||||
ret
|
||||
divers db 'divers',0
|
||||
|
||||
classes:
|
||||
dw offset class0
|
||||
dw offset class1
|
||||
dw offset class2
|
||||
dw offset class3
|
||||
dw offset class4
|
||||
dw offset class5
|
||||
dw offset class6
|
||||
dw offset class7
|
||||
dw offset class8
|
||||
dw offset class9
|
||||
dw offset class10
|
||||
dw offset class11
|
||||
dw offset class12
|
||||
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
|
||||
|
||||
;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
|
||||
|
||||
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
|
||||
subclass10 db 'scsi',0
|
||||
subclass11 db 'ide',0
|
||||
subclass12 db 'disquette',0
|
||||
subclass13 db 'ipi',0
|
||||
|
||||
class2d:
|
||||
dw offset subclass20
|
||||
dw offset subclass21
|
||||
dw offset subclass22
|
||||
subclass20 db 'ethernet',0
|
||||
subclass21 db 'token ring',0
|
||||
subclass22 db 'fddi',0
|
||||
|
||||
class3d:
|
||||
dw offset subclass30
|
||||
dw offset subclass31
|
||||
subclass30 db 'vga',0
|
||||
subclass31 db 'xga',0
|
||||
|
||||
class4d:
|
||||
dw offset subclass40
|
||||
dw offset subclass41
|
||||
subclass40 db 'video',0
|
||||
subclass41 db 'audio',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
|
||||
subclass60 db 'hote',0
|
||||
subclass61 db 'isa',0
|
||||
subclass62 db 'eisa',0
|
||||
subclass63 db 'mc',0
|
||||
subclass64 db 'pci',0
|
||||
subclass65 db 'pcmcia',0
|
||||
subclass66 db 'nubus',0
|
||||
subclass67 db 'cardbus',0
|
||||
|
||||
class7d:
|
||||
dw offset subclass70
|
||||
dw offset subclass71
|
||||
subclass70 db 'serie',0
|
||||
subclass71 db 'parallele',0
|
||||
|
||||
class8d:
|
||||
dw offset subclass80
|
||||
dw offset subclass81
|
||||
dw offset subclass82
|
||||
subclass80 db 'pic 8259a',0
|
||||
subclass81 db 'dma 8237',0
|
||||
subclass82 db 'tim 8254',0
|
||||
|
||||
class9d:
|
||||
dw offset subclass90
|
||||
dw offset subclass91
|
||||
dw offset subclass92
|
||||
subclass90 db 'clavier',0
|
||||
subclass91 db 'stylo',0
|
||||
subclass92 db 'souris',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
|
||||
subclass120 db 'firewire',0
|
||||
subclass121 db 'access',0
|
||||
subclass122 db 'ssa',0
|
||||
subclass123 db 'usb',0
|
||||
|
||||
;bx pci version, cl nbbus, al pci type
|
||||
getPciInfos:
|
||||
push dx
|
||||
mov ax,0B101h
|
||||
xor edi,edi
|
||||
mov edx," PCI"
|
||||
int 1Ah
|
||||
jc ErrorPci
|
||||
cmp dx,04350h
|
||||
jne ErrorPci
|
||||
clc
|
||||
pop dx
|
||||
ret
|
||||
errorpci:
|
||||
stc
|
||||
pop dx
|
||||
ret
|
||||
|
||||
;al=bus bl=index cl=deviceid ch=func->dl
|
||||
getfunctioninfo:
|
||||
push eax bx cx
|
||||
mov ah,80h
|
||||
shl eax,16
|
||||
mov ah,cl
|
||||
shl ah,3
|
||||
or ah,ch
|
||||
mov al,bl
|
||||
and al,0fch
|
||||
mov dx,0cf8h
|
||||
out dx,eax
|
||||
mov dx,0CFCh
|
||||
and bl,3
|
||||
or dl,bl
|
||||
in al,dx
|
||||
mov dl,al
|
||||
pop cx bx eax
|
||||
ret
|
||||
|
||||
;al=bus cl=deviceid ch=func es:di
|
||||
Getallfunctionsinfos:
|
||||
push ax bx dx di
|
||||
xor bl,bl
|
||||
goinfos:
|
||||
call getfunctioninfo
|
||||
inc bl
|
||||
cmp bl,2
|
||||
ja notzarb
|
||||
cmp dl,0FFh
|
||||
je notexist
|
||||
notzarb:
|
||||
mov es:[di],dl
|
||||
inc di
|
||||
cmp bl,255
|
||||
jb goinfos
|
||||
pop di
|
||||
push di
|
||||
cmp word ptr [di],0000h
|
||||
je notexist
|
||||
clc
|
||||
pop di dx bx ax
|
||||
ret
|
||||
notexist:
|
||||
stc
|
||||
pop di dx bx ax
|
||||
ret
|
||||
|
||||
;=============CLEAR=========
|
||||
;Efface l'ecran texte
|
||||
;->
|
||||
;<-
|
||||
;=============================
|
||||
cleartext:
|
||||
push es eax cx di
|
||||
xor di,di
|
||||
mov ax,0b800h
|
||||
mov es,ax
|
||||
mov eax,07200720h
|
||||
mov cx,cs:pagesize
|
||||
shr cx,2
|
||||
cld
|
||||
rep stosd
|
||||
mov cs:xy,0
|
||||
mov cs:x,0
|
||||
mov cs:y,0
|
||||
pop di cx eax es
|
||||
ret
|
||||
|
||||
|
||||
;==========LINE=========
|
||||
;remet le curseur a la ligne
|
||||
;->
|
||||
;<-
|
||||
;=============================
|
||||
line:
|
||||
push bx cx di es
|
||||
mov bh,cs:x
|
||||
mov bl,cs:y
|
||||
xor bh,bh
|
||||
mov cl,cs:lines
|
||||
dec cl
|
||||
dec cl
|
||||
cmp bl,cl
|
||||
jne scro
|
||||
dec bl
|
||||
mov cl,1
|
||||
call scrolldown
|
||||
scro:
|
||||
inc bl
|
||||
call setxy
|
||||
pop es di cx bx
|
||||
ret
|
||||
|
||||
;==========SETXY=========
|
||||
;Change les coordonnées du curseur a X:AH,Y:AL
|
||||
;-> AX
|
||||
;<- es di
|
||||
;=============================
|
||||
setxy:
|
||||
push ax bx dx
|
||||
mov cs:x,bh
|
||||
mov cs:y,bl
|
||||
mov al,bl
|
||||
mov bl,bh
|
||||
xor bh,bh
|
||||
mov di,bx
|
||||
mul cs:columns
|
||||
add di,ax
|
||||
shl di,1
|
||||
mov cs:xy,di
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
pop dx bx ax
|
||||
ret
|
||||
|
||||
;==========SCROLLDOWN=========
|
||||
;defile de cx lines vers le bas
|
||||
;-> CX
|
||||
;<-
|
||||
;=============================
|
||||
scrolldown:
|
||||
push ax cx dx si di ds es
|
||||
mov si,0B800h
|
||||
mov es,si
|
||||
mov ds,si
|
||||
mov ax,cx
|
||||
mul cs:columns
|
||||
shl ax,1
|
||||
mov si,ax
|
||||
mov cx,cs:pagesize
|
||||
sub cx,si
|
||||
xor di,di
|
||||
cld
|
||||
rep movsb
|
||||
pop es ds di si dx cx ax
|
||||
ret
|
||||
|
||||
|
||||
;===================================Afficher un int EDX a l'‚cran en ah,al================
|
||||
ShowInt:
|
||||
push eax bx cx edx esi di es ds
|
||||
mov di,cs:xy
|
||||
mov cx,0B800h
|
||||
mov es,cx
|
||||
xor cx,cx
|
||||
mov eax,edx
|
||||
mov esi,10
|
||||
mov bx,offset showbuffer+27
|
||||
decint3:
|
||||
xor edx,edx
|
||||
div esi
|
||||
add dl,'0'
|
||||
mov dh,7
|
||||
sub bx,2
|
||||
add cx,2
|
||||
mov cs:[bx],dx
|
||||
cmp ax,0
|
||||
jne decint3
|
||||
mov si,bx
|
||||
push cs
|
||||
pop ds
|
||||
cld
|
||||
rep movsb
|
||||
mov cs:xy,di
|
||||
pop ds es di esi edx cx bx eax
|
||||
ret
|
||||
|
||||
;================Affiche la chaine 0 de caractŠre contenue dans ds:si
|
||||
showstring0:
|
||||
push es cx si di
|
||||
mov di,cs:xy
|
||||
mov cx,0B800h
|
||||
mov es,cx
|
||||
mov ch,cs:colors
|
||||
strinaize0:
|
||||
mov cl,[si]
|
||||
cmp cl,0
|
||||
je no0
|
||||
mov es:[di],cx
|
||||
add di,2
|
||||
inc si
|
||||
jmp strinaize0
|
||||
no0:
|
||||
mov cs:xy,di
|
||||
pop di si cx es
|
||||
ret
|
||||
|
||||
;==============================Affiche le nombre nb hexa en EDX==============
|
||||
ShowHex:
|
||||
push es ax bx cx edx di
|
||||
mov di,cs:xy
|
||||
mov bx,0B800h
|
||||
mov es,bx
|
||||
mov ax,cx
|
||||
sub cx,32
|
||||
neg cx
|
||||
shl edx,cl
|
||||
mov ch,cs:colors
|
||||
shr ax,2
|
||||
Hexaize:
|
||||
rol edx,4
|
||||
mov bx,dx
|
||||
and bx,0fh
|
||||
mov cl,cs:[bx+offset Tab]
|
||||
mov es:[di],cx
|
||||
add di,2
|
||||
dec al
|
||||
jnz Hexaize
|
||||
mov cs:xy,di
|
||||
pop di edx cx bx ax es
|
||||
ret
|
||||
|
||||
Tab db '0123456789ABCDEF'
|
||||
x db 0
|
||||
y db 0
|
||||
xy dw 0
|
||||
pagesize dw 80*25*2
|
||||
lines db 25
|
||||
columns db 80
|
||||
colors db 7
|
||||
showbuffer db 35 dup (0FFh)
|
||||
|
||||
end start
|
|
@ -0,0 +1,394 @@
|
|||
.model tiny
|
||||
.386c
|
||||
.code
|
||||
org 0100h
|
||||
|
||||
|
||||
start:
|
||||
mov ax,0305h
|
||||
mov bx,0008h
|
||||
int 16h
|
||||
mov ax,0002
|
||||
int 47H
|
||||
mov ah,2
|
||||
int 47h
|
||||
xor ebp,ebp
|
||||
xor ax,ax
|
||||
mov fs,ax
|
||||
mov ah,43
|
||||
int 47h
|
||||
Adres:
|
||||
mov di,offset infos
|
||||
mov ah,34
|
||||
int 47h
|
||||
dec byte ptr [di]
|
||||
mov al,[di+1]
|
||||
sub al,16
|
||||
mov bl,al
|
||||
shr al,2
|
||||
mov [di+1],al
|
||||
and bl,11b
|
||||
mov [di+2],bl
|
||||
mov al,[di+7]
|
||||
cmp al,oldmode
|
||||
je noinit
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov oldmode,al
|
||||
noinit:
|
||||
mov bx,0
|
||||
mov ah,25
|
||||
int 47h
|
||||
mov bh,infos
|
||||
mov edi,ebp
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
lines:
|
||||
mov edx,edi
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
mov cx,16
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov si,offset dep
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov dx,di
|
||||
mov ah,10
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset spaces
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
mov al,infos+1
|
||||
mov cl,7
|
||||
mov ah,21
|
||||
int 47h
|
||||
mov esi,edi
|
||||
doaline:
|
||||
mov edx,edi
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
mov fs,dx
|
||||
mov dl,fs:[di]
|
||||
mov ah,10
|
||||
mov cl,8
|
||||
int 47h
|
||||
mov ah,5
|
||||
int 47h
|
||||
inc edi
|
||||
dec al
|
||||
jnz doaline
|
||||
mov edi,esi
|
||||
mov si,offset spaces
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov al,infos+1
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
doaline2:
|
||||
mov edx,edi
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
mov fs,dx
|
||||
mov dl,fs:[di]
|
||||
mov ah,7
|
||||
int 47h
|
||||
inc edi
|
||||
dec al
|
||||
jnz doaline2
|
||||
dec bh
|
||||
je outes
|
||||
cmp byte ptr infos+2,0
|
||||
je lines
|
||||
mov ah,6
|
||||
int 47h
|
||||
jmp lines
|
||||
outes:
|
||||
mov ah,21
|
||||
mov cl,112
|
||||
int 47h
|
||||
mov bh,0
|
||||
mov bl,infos
|
||||
mov si,offset menu
|
||||
mov ah,14h
|
||||
int 47h
|
||||
waitkey:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp ax,3B00h
|
||||
jne suit
|
||||
inc ebp
|
||||
jmp adres
|
||||
suit:
|
||||
cmp ax,3C00h
|
||||
jne suit2
|
||||
dec ebp
|
||||
jmp adres
|
||||
suit2:
|
||||
cmp ax,3D00h
|
||||
jne suit3
|
||||
add ebp,24*16
|
||||
jmp adres
|
||||
suit3:
|
||||
cmp ax,3E00h
|
||||
jne suit4
|
||||
sub ebp,24*16
|
||||
jmp adres
|
||||
suit4:
|
||||
cmp ax,3F00h
|
||||
jne suit5
|
||||
add ebp,010000h
|
||||
jmp adres
|
||||
suit5:
|
||||
cmp ax,4000h
|
||||
jne suit6
|
||||
sub ebp,010000h
|
||||
jmp adres
|
||||
suit6:
|
||||
cmp ax,4100h
|
||||
jne suit7
|
||||
mov ah,21
|
||||
mov cl,116
|
||||
int 47h
|
||||
mov dword ptr [pope],'TIDE'
|
||||
mov bl,infos
|
||||
xor bh,bh
|
||||
mov si,offset menu
|
||||
mov ah,14h
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
mov ax,0B800h
|
||||
mov es,ax
|
||||
mov xxyy2,3
|
||||
mov xxyy,3
|
||||
call calc1
|
||||
call calc2
|
||||
waitst:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp ah,41h
|
||||
jne tre
|
||||
mov dword ptr [pope],' EUV'
|
||||
push cs
|
||||
pop es
|
||||
jmp adres
|
||||
tre:
|
||||
cmp al,0
|
||||
jne write
|
||||
cmp ah,48h
|
||||
jne tre1
|
||||
cmp yy,0
|
||||
je waitst
|
||||
dec yy
|
||||
jmp cursor
|
||||
tre1:
|
||||
cmp ah,50h
|
||||
jne tre2
|
||||
mov al,infos
|
||||
dec al
|
||||
xor ah,ah
|
||||
cmp yy,ax
|
||||
je waitst
|
||||
inc yy
|
||||
jmp cursor
|
||||
tre2:
|
||||
cmp ah,4Dh
|
||||
jne tre4
|
||||
cmp xx,15
|
||||
je waitst
|
||||
inc xx
|
||||
jmp cursor
|
||||
tre4:
|
||||
cmp ah,4Bh
|
||||
jne waitst
|
||||
cmp xx,0
|
||||
je waitst
|
||||
dec xx
|
||||
jmp cursor
|
||||
write:
|
||||
call AsciiHex2dec
|
||||
cmp cl,15
|
||||
ja waitst
|
||||
call calc1
|
||||
call calc2
|
||||
mov edi,es:[bx-1]
|
||||
mov dx,es:[si-1]
|
||||
mov byte ptr es:[bx],0112
|
||||
mov es:[bx-1],al
|
||||
writs:
|
||||
mov ax,0
|
||||
int 16H
|
||||
mov ch,cl
|
||||
call AsciiHex2dec
|
||||
cmp cl,15
|
||||
ja writs
|
||||
shl ch,4
|
||||
add ch,cl
|
||||
mov es:[bx+1],al
|
||||
mov es:[si-1],ch
|
||||
mov ax,bx
|
||||
call calc3
|
||||
mov gs:[bx],ch
|
||||
pusha
|
||||
popa
|
||||
mov cl,gs:[bx]
|
||||
cmp ch,cl
|
||||
je no
|
||||
push si ax
|
||||
mov ah,25
|
||||
mov bl,infos
|
||||
xor bh,bh
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,117
|
||||
int 47h
|
||||
mov si,offset msg
|
||||
mov ah,13
|
||||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
mov bl,infos
|
||||
xor bh,bh
|
||||
mov ah,25
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,116
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset menu
|
||||
int 47h
|
||||
pop bx si
|
||||
mov es:[bx-1],edi
|
||||
mov es:[si-1],dx
|
||||
no:
|
||||
|
||||
inc xx
|
||||
cmp xx,16
|
||||
jne pasde
|
||||
inc yy
|
||||
mov xx,0h
|
||||
pasde:
|
||||
call calc1
|
||||
call calc2
|
||||
jmp waitst
|
||||
|
||||
cursor:
|
||||
call calc1
|
||||
call calc2
|
||||
jmp waitst
|
||||
suit7:
|
||||
cmp ax,4200h
|
||||
jne adres
|
||||
mov ah,27
|
||||
int 47h
|
||||
db 0CBH ; +++++++
|
||||
ret
|
||||
|
||||
calc1:
|
||||
push ax dx si
|
||||
mov ax,xx
|
||||
mov dx,xx
|
||||
shl ax,2
|
||||
shl dx,1
|
||||
add ax,dx
|
||||
add ax,27
|
||||
mov bx,YY
|
||||
mov dx,yy
|
||||
shl bx,5
|
||||
shl dx,7
|
||||
add bx,dx
|
||||
add bx,ax
|
||||
mov byte ptr es:[bx],112
|
||||
mov byte ptr es:[bx+2],112
|
||||
mov si,xxyy
|
||||
mov byte ptr es:[si],07
|
||||
mov byte ptr es:[si+2],07
|
||||
mov xxyy,bx
|
||||
pop si dx ax
|
||||
ret
|
||||
|
||||
calc2:
|
||||
push ax bx dx
|
||||
mov si,YY
|
||||
mov dx,yy
|
||||
shl si,5
|
||||
shl dx,7
|
||||
add si,dx
|
||||
mov dx,xx
|
||||
shl dx,1
|
||||
add si,dx
|
||||
add si,129
|
||||
mov byte ptr es:[si],112
|
||||
mov bx,xxyy2
|
||||
mov byte ptr es:[bx],07
|
||||
mov xxyy2,si
|
||||
pop dx bx ax
|
||||
ret
|
||||
|
||||
calc3:
|
||||
push dx
|
||||
xor ebx,ebx
|
||||
mov bx,xx
|
||||
mov dx,yy
|
||||
shl dx,4
|
||||
add bx,dx
|
||||
add ebx,ebp
|
||||
mov edx,ebx
|
||||
shr edx,4*4
|
||||
shl edx,4*3
|
||||
mov gs,dx
|
||||
pop dx
|
||||
ret
|
||||
|
||||
asciihex2dec:
|
||||
cmp al,'a'
|
||||
jb nomin
|
||||
cmp al,'f'
|
||||
ja nomin
|
||||
sub al,'a'-'A'
|
||||
jmp ismaj
|
||||
nomin:
|
||||
cmp al,'A'
|
||||
jb nomaj
|
||||
cmp al,'F'
|
||||
ja nomaj
|
||||
ismaj:
|
||||
mov cl,al
|
||||
sub cl,'A'-10
|
||||
jmp endt
|
||||
nomaj:
|
||||
mov cl,al
|
||||
sub cl,'0'
|
||||
endt:
|
||||
ret
|
||||
|
||||
dep db ':',0
|
||||
sect dw 0
|
||||
xx dw 0
|
||||
yy dw 0
|
||||
xxyy dw 3
|
||||
xxyy2 dw 3
|
||||
|
||||
msg db 'Erreur : zone non modifiable (ROM) pressez une touche pour continuer ',0
|
||||
menu db 'haut/bas [F1/2] Offset [F3/4] Segment [F5/6] Mode F7, Quitter F8 MODE '
|
||||
pope db 'VUE ',0
|
||||
spaces db ' ³ ',0
|
||||
|
||||
showbuffer db 35 dup (0FFh)
|
||||
oldmode db 0
|
||||
infos db 40 dup (0)
|
||||
end start
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,194 @@
|
|||
.model tiny
|
||||
.486
|
||||
smart
|
||||
.code
|
||||
|
||||
org 0100h
|
||||
|
||||
include ..\include\fat.h
|
||||
|
||||
start:
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov ah,25
|
||||
mov bx,0
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,70h
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset msg1
|
||||
int 47h
|
||||
mov ah,21
|
||||
mov cl,7
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset prompt
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset infos
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset prompt
|
||||
int 47h
|
||||
mov ah,3
|
||||
int 48h
|
||||
xor bp,bp
|
||||
mov di,offset bufferentry
|
||||
mov si,di
|
||||
mov ah,7
|
||||
int 48h
|
||||
jc nofiles
|
||||
go:
|
||||
test [si+Entries.FileAttr],00010000b
|
||||
je notdirectory
|
||||
mov ah,21
|
||||
mov cl,4
|
||||
int 47h
|
||||
jmp notall
|
||||
notdirectory:
|
||||
cmp [si+Entries.FilExt],'E'
|
||||
jne notexe
|
||||
cmp [si+Entries.FilExt+1],'X'
|
||||
jne notexe
|
||||
cmp [si+Entries.FilExt+2],'E'
|
||||
jne notexe
|
||||
mov ah,21
|
||||
mov cl,5
|
||||
int 47h
|
||||
jmp notall
|
||||
notexe:
|
||||
cmp [si+Entries.FilExt],'S'
|
||||
jne notsys
|
||||
cmp [si+Entries.FilExt+1],'Y'
|
||||
jne notsys
|
||||
cmp [si+Entries.FilExt+2],'S'
|
||||
jne notsys
|
||||
mov ah,21
|
||||
mov cl,0Ah
|
||||
int 47h
|
||||
jmp notall
|
||||
notsys:
|
||||
mov ah,21
|
||||
mov cl,7h
|
||||
int 47h
|
||||
notall:
|
||||
mov ah,46
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,44
|
||||
mov dx,[si+Entries.FileDateCrea]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,45
|
||||
mov dx,[si+Entries.FileTimeCrea]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,44
|
||||
mov dx,[si+Entries.FileDate]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,45
|
||||
mov dx,[si+Entries.FileTime]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,48
|
||||
mov edx,[si+Entries.FileSize]
|
||||
int 47h
|
||||
mov ah,05
|
||||
int 47h
|
||||
int 47h
|
||||
int 47h
|
||||
mov ah,47
|
||||
mov dl,[si+Entries.FileAttr]
|
||||
int 47h
|
||||
mov ah,6
|
||||
int 47h
|
||||
inc bp
|
||||
mov ah,8
|
||||
int 48h
|
||||
jnc go
|
||||
nofiles:
|
||||
mov ah,21
|
||||
mov cl,70h
|
||||
int 47h
|
||||
mov ah,13
|
||||
mov si,offset menu
|
||||
int 47h
|
||||
mov xx,1
|
||||
mov xxold,2
|
||||
call Select
|
||||
endof:
|
||||
mov ax,0
|
||||
int 16h
|
||||
cmp ah,50h
|
||||
jne tre1
|
||||
cmp xx,bp
|
||||
je endof
|
||||
inc xx
|
||||
call select
|
||||
jmp endof
|
||||
tre1:
|
||||
cmp ah,48h
|
||||
jne tre2
|
||||
cmp xx,1
|
||||
je endof
|
||||
dec xx
|
||||
call select
|
||||
jmp endof
|
||||
tre2:
|
||||
cmp al,0Dh
|
||||
jne tre3
|
||||
tre3:
|
||||
cmp ah,59
|
||||
jne tre4
|
||||
jmp start
|
||||
tre4:
|
||||
cmp ah,67
|
||||
jne endof
|
||||
db 0CBh
|
||||
|
||||
;selectionne la ligne xx
|
||||
Select:
|
||||
push ax di
|
||||
mov di,xxold
|
||||
mov al,7
|
||||
add di,3
|
||||
mov ah,32
|
||||
int 47h
|
||||
mov ax,xx
|
||||
mov xxold,ax
|
||||
mov di,xx
|
||||
mov ah,32
|
||||
mov al,112
|
||||
add di,3
|
||||
int 47h
|
||||
pop di ax
|
||||
ret
|
||||
|
||||
xx dw 1
|
||||
xxold dw 0
|
||||
menu db '[F1] Lire disque [F9] Quitter ',0
|
||||
msg1 db ' Gestionnaire de fichier Version 1.0 ',0
|
||||
msg2 db 'Programme en cours de chargement',0
|
||||
prompt db '--------------------------------------------------------------------------------',0
|
||||
infos db 'Nom Ext. Date creation Date modification Taille Attributs',0
|
||||
|
||||
bufferentry equ $
|
||||
|
||||
end start
|
|
@ -0,0 +1,82 @@
|
|||
.model tiny
|
||||
.386c
|
||||
.code
|
||||
org 0100h
|
||||
|
||||
|
||||
start:
|
||||
mov si,offset logo
|
||||
mov ah,4
|
||||
xor di,di
|
||||
mov bx,8000h
|
||||
mov es,bx
|
||||
int 48h
|
||||
jc problem
|
||||
|
||||
push es
|
||||
pop ds
|
||||
mov bx,7000h
|
||||
mov es,bx
|
||||
xor si,si
|
||||
xor di,di
|
||||
mov ah,6
|
||||
int 48h
|
||||
jc problem2
|
||||
|
||||
push es
|
||||
pop ds
|
||||
xor si,si
|
||||
|
||||
mov ax,0008h
|
||||
int 47h
|
||||
mov ah,38
|
||||
int 47h
|
||||
mov ah,2
|
||||
int 47h
|
||||
mov cx,300
|
||||
mov bx,30
|
||||
mov ah,37
|
||||
int 47h
|
||||
mov ah,15h
|
||||
mov cl,11
|
||||
int 47h
|
||||
push cs
|
||||
pop ds
|
||||
mov ah,13
|
||||
mov si,offset poper
|
||||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
mov ah,39
|
||||
int 47h
|
||||
mov ax,0004
|
||||
int 47h
|
||||
db 0CBH
|
||||
|
||||
problem:
|
||||
push cs
|
||||
pop ds
|
||||
mov ah,13
|
||||
mov si,offset error
|
||||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
db 0CBh
|
||||
|
||||
problem2:
|
||||
push cs
|
||||
pop ds
|
||||
mov ah,13
|
||||
mov si,offset error2
|
||||
int 47h
|
||||
mov ax,0
|
||||
int 16h
|
||||
db 0CBh
|
||||
|
||||
poper db 'COS2000 en mode graphique',0
|
||||
logo db 'cos.rip',0
|
||||
ok1 db 'Chargement de l''image OK',0
|
||||
ok2 db 'Decompression de l''image OK',0
|
||||
error db 'Une erreur est apparue lors du chargement de l''image',0
|
||||
error2 db 'Une erreur est apparue lors de la decompression de l''image',0
|
||||
end start
|