From f05d3d49af14ed3228b7fa9ab4602f9b63d808b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Sun, 10 Dec 2000 21:48:09 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20premi=C3=A8re=20version=20de=20COS2000.?= =?UTF-8?q?=20Affichage=20d'un=20texte=20en=203D=20au=20d=C3=A9marrage.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Graphisme/logo.png | Bin 0 -> 65941 bytes LICENSE.md | 675 +++++++++++++++++++++++++++++++++++++++++++++ README.md | 51 ++++ asm.bat | 9 + boot.asm | 164 +++++++++++ cosinit.asm | 217 +++++++++++++++ exe2boot.asm | 67 +++++ id.asm | 367 ++++++++++++++++++++++++ 8 files changed, 1550 insertions(+) create mode 100644 Graphisme/logo.png create mode 100755 LICENSE.md create mode 100644 README.md create mode 100755 asm.bat create mode 100755 boot.asm create mode 100755 cosinit.asm create mode 100755 exe2boot.asm create mode 100755 id.asm diff --git a/Graphisme/logo.png b/Graphisme/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..029ae7cd265c7e4976ce54745c85e70137ae026b GIT binary patch literal 65941 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 W5f~jyt_OE>;l84V!dE#n|NjDa1d+i2 literal 0 HcmV?d00001 diff --git a/LICENSE.md b/LICENSE.md new file mode 100755 index 0000000..01a7a80 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,675 @@ +### GNU GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +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. + + + Copyright (C) + + 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 . + +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: + + Copyright (C) + 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 . + +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 . \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..444dfb7 --- /dev/null +++ b/README.md @@ -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 diff --git a/asm.bat b/asm.bat new file mode 100755 index 0000000..0653196 --- /dev/null +++ b/asm.bat @@ -0,0 +1,9 @@ +@echo off +del system.bin +ren id.com system.bin +tasm boot.asm /t/x/m4 +tlink boot.obj /x +del boot.obj +exe2boot.com +del boot.exe +cosinit.com diff --git a/boot.asm b/boot.asm new file mode 100755 index 0000000..32bd54c --- /dev/null +++ b/boot.asm @@ -0,0 +1,164 @@ +boots segment +.386 +org 000h +assume cs:boots,ds:boots + +start: +jmp boot + + +bootdb db 'COS2000A' ;ID Formatage + dw 512 ;octet/secteur + db 1 ;secteur/cluster + dw 1 ;secteur reserv‚ + db 2 ;nb de FAT + dw 224 ;nb secteur rep racine + dw 2880 ;nb secteur du volume + db 0F0h ;ID support + dw 9 ;secteur/FAT + dw 18 ;secteur/piste + dw 2 ;nb de tˆte + dw 0 ;distance 1er sect et sect masse + db 0,0,0,0,0,0,0,0,29h ;? + db 01,02,03,04 ;no de serie + db 'COS2000 ' ;nom de volume + db 'FAT16 ' ;FAT +specialboot: + db 0 ;Secteur Systeme +errorloading db 'The disk inserted in the floppy drive is not a system disk !!',0dh,0 +okloading db 'COS is loading',0dh,0 + + +errorboot: + mov si,offset errorloading + call showstr + mov ah,0 + int 16h + int 19h +boot: + cli + mov ax,07C0h + mov ds,ax + mov ax,09000h + mov ss,ax + mov sp,0FFFFh + mov ax,1000h + mov es,ax + sti + xor ax,ax + xor dx,dx + int 13h + jc errorboot + mov si,offset okloading + call showstr + mov cx,13 + mov bx,100h + call readsector + jc errorboot + mov cx,es:[bx+26] + call readsector + jc errorboot + add bx,512 + inc cx + call readsector + jc errorboot + db 2eh,0ffh,1eh + dw offsets + Offsets dw 100h + dw 1000h + ret + + +DiskSectorsPerTrack dw 18 +DiskTracksPerHead dw 80 +DiskHeads dw 2 + +;===================================Afficher un int EDX a l'‚cran================ +ShowInt: + push eax edx esi di es + mov di,xy + mov ax,0B800h + mov es,ax + mov eax,edx + mov esi,10 +decint2: + xor edx,edx + div esi + add dl,'0' + mov dh,colors + mov es:[di],dx + sub di,2 + cmp ax,0 + jne decint2 + sub di,2 + mov xy,di + pop es di esi edx eax +ret + +xy dw 20 +colors db 4 + +ReadSector: +push cx dx si + mov AX, CX + xor DX, DX + div DiskSectorsPerTrack + mov CL, DL ;{ Set the sector } + and CL, 63 ;{ Top two bits are bits 8&9 of the cylinder } + xor DX, DX + div DiskTracksPerHead + mov CH, DL ;{ Set the track bits 0-7 } + mov AL, DH + ror AL, 1 + ror AL, 1 + and AL, 11000000b + or CL, AL ;{ Set bits 8&9 of track } + xor dX, DX + div DiskHeads + mov DH, DL ;{ Set the head } + inc CL + mov SI, 4 +TryAgain: + mov AL, 1 + mov DL, 0 + mov AH, 2 + int 13h + jnc Done + dec SI + jnz TryAgain +Done: + pop si dx cx +ret + +showcrlf: + push ax bx + mov ax, 0E0Dh + xor bx, bx + int 10h + mov al, 0Ah + int 10h + pop bx ax +ret + +showstr: + push ax bx si +again: + lodsb + or al,al + jz fin + cmp al,0Dh + jne noret + call showcrlf + jmp again +noret: + mov ah,0Eh + mov bx,07h + int 10h + jmp again + fin: + pop si bx ax + ret + + +end start + diff --git a/cosinit.asm b/cosinit.asm new file mode 100755 index 0000000..6b68e87 --- /dev/null +++ b/cosinit.asm @@ -0,0 +1,217 @@ +.model tiny +.486 +smart +.code + +org 0100h + + +start: +jmp CopyCOS + +DiskSectorsPerTrack dw 18 +DiskTracksPerHead dw 80 +DiskHeads dw 2 +NameBoot db 'Boot.bin',0 +Namesystem db 'System.bin',0 +Message db 0Ah,0Dh,'Installation of the COS (Celyn Operating System) !!',0Ah,0Dh,'Written By Horde Nicolas',0Ah,0Dh,'Copyright 2000',0Ah,0Dh + db 0Ah,0Dh,'Create boot sector$' +systfile db 0Ah,0Dh,'Creating file allocation table 16 bits$' +systfile2 db 0Ah,0Dh,'Creating file information table 32 bytes$' +systfile3 db 0Ah,0Dh,'Creating operating system files$' +Errormsg db 0Ah,0Dh,0Ah,0Dh,'An error has stopped the copying process !',0Ah,0Dh,'$' +Ok db 0Ah,0Dh,0Ah,0Dh,'The boot sector and the system files had been succefully copied.',0Ah,0Dh, 'To try COS reboot with this system disk',0Ah,0Dh,0Ah,0Dh,'$' + +entrie db 'System file',0 + db 'sys',0,0 + dw 1234h + dw 1234h + dw 1234h + dw 1234h + db 0h + dw 32 + dw 512 + dw 0h + dw 0 + + +CopyCOS: +mov ah,09 +mov dx,offset message +int 21h +jc error +mov ax,3D00h +mov dx,offset nameboot +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,512 +jne error +mov ax,4200h +xor cx,cx +xor dx,dx +int 21h +jc error +mov ah,3fh +mov cx,512 +mov dx,offset buffer +int 21h +jc error +mov ah,3eh +int 21h +jc error +mov cx,0 +mov bx,dx +call writesector +jne error +mov ah,09 +mov dx,offset systfile +int 21h +jc error + +mov cx,512/4 +mov di,bx +mov eax,0 +rep stosd +mov cx,13 +fatanymore: +call writesector +jne error +dec cx +cmp cx,1 +ja fatanymore +mov di,bx +mov ax,0FFF0h +mov cx,13 +rep stosw +mov ax,0FFFFh +stosw +mov word ptr [bx+32*2],33 +mov word ptr [bx+33*2],0FFFFh +mov cx,1 +call writesector +jne error + +mov ah,09 +mov dx,offset systfile2 +int 21h +jc error +mov cx,13 +mov bx,offset entrie +call writesector +jne error + +mov ah,09 +mov dx,offset systfile3 +int 21h +jc error + +mov ax,3D00h +mov dx,offset namesystem +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 +sub ax,1 ;+512 +cmp ax,0 +jl error +shr ax,9 +inc ax +mov bp,ax +mov ax,4200h +xor cx,cx +xor dx,dx +int 21h +jc error +mov ah,3fh +mov cx,0FFFFh +mov dx,offset buffer +int 21h +jc error +mov bx,dx +mov cx,32 +syst: +call writesector +jne error +add bx,512 +inc cx +dec bp +jnz syst + + + + + + + +mov ah,09 +mov dx,offset ok +int 21h +jc error +ret +error: +mov ah,09 +mov dx,offset errormsg +int 21h +ret + + + + + + + +WriteSector: +push cx dx si + mov AX, CX + xor DX, DX + div DiskSectorsPerTrack + mov CL, DL ;{ Set the sector } + and CL, 63 ;{ Top two bits are bits 8&9 of the cylinder } + xor DX, DX + div DiskTracksPerHead + mov CH, DL ;{ Set the track bits 0-7 } + mov AL, DH + ror AL, 1 + ror AL, 1 + and AL, 11000000b + or CL, AL ;{ Set bits 8&9 of track } + xor DX, DX + div DiskHeads + mov DH, DL ;{ Set the head } + inc CL + mov SI, 4 +TryAgain: + mov AL, 1 + mov DL, 0 + mov AH, 3 + int 13h + jnc Done + dec SI + jnz TryAgain +Done: + mov cl, AH + mov ah,9 + mov dx,offset sign + int 21h + cmp cl,0 + pop si dx cx +ret + +sign db '.$' +buffer db 512 dup (0) + +end start diff --git a/exe2boot.asm b/exe2boot.asm new file mode 100755 index 0000000..37c3399 --- /dev/null +++ b/exe2boot.asm @@ -0,0 +1,67 @@ +.model tiny +.486 +smart +.code + +org 0100h + + +start: +jmp transform +NameBoot db 'Boot.exe',0 +nameboot2 db 'Boot.bin',0 +buffer db 510 dup (0) + dw 0AA55h +message db 0ah,0dh,'Transformation of boot.com to boot.bin...',0ah,0dh,'By Horde Nicolas',0ah,0dh,'Copyright 2000',0ah,0dh,'$' +ok db 0ah,0dh,'The transformation was done succefully !',0ah,0dh,'$' +errormsg db 0ah,0dh,'Some errors has been detected !',0ah,0dh,'$' +transform: +mov ah,09 +mov dx,offset message +int 21h +mov ax,3D00h +mov dx,offset nameboot +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 +mov ax,4200h +xor cx,cx +mov dx,512 +int 21h +jc error +mov ah,3fh +mov cx,512 +mov dx,offset buffer +int 21h +jc error +mov ah,3eh +int 21h +jc error +mov ah,3ch +xor cx,cx +mov dx,offset nameboot2 +int 21h +jc error +mov ah,40h +mov cx,512 +mov dx,offset buffer +int 21h +jc error +mov ah,09 +mov dx,offset ok +int 21h +ret +error: +mov ah,09 +mov dx,offset errormsg +int 21h +ret + +end start diff --git a/id.asm b/id.asm new file mode 100755 index 0000000..b748b79 --- /dev/null +++ b/id.asm @@ -0,0 +1,367 @@ +.model tiny +.386c +.code +org 0100h + + colores equ 7 + + +logoY equ 064h +logo2X equ 0A0h +logo2Y equ 064h +ecartlogo2 equ 13Eh +logocoordsize equ 0B40h +logo2coordsize equ 26Ch +zoomout equ 43h + + + +start: + ;mov ax,cs + + mov ax,01000h + mov ds,ax + mov es,ax + mov gs,ax + mov ax,13h + int 10h + + mov dx,3C8h + mov al,7 + out dx,al + inc dx + xor al,al + out dx,al + out dx,al + out dx,al + mov si,offset logo2text + call showstr + mov ax,0A000h + mov ds,ax + push ds + push es + push gs + mov di,logo2coord + mov cx,logo2coordsize + xor si,si + xor dx,dx + xor bx,bx + +loopcoord2: + lodsb + or al,al + jz nothingcoord2 + mov ax,dx + sub ax,5Ah + stosw + mov ax,bx + sub ax,14h + stosw + inc gs:nblogo2 +nothingcoord2: + add dx,3 + cmp dx,0BAh + jne short loc_3 + xor dx,dx + add si,102h + add bx,4 +loc_3: + loop loopcoord2 + + pop ds + call zerocurs + mov si,offset data6 + call showstr + + pop es + pop ds + mov cx,logocoordsize + xor si,si + xor dx,dx + xor bx,bx + +loopcoord: + lodsb + or al,al + jz nothingcoord + mov ax,dx + sub ax,32h + stosw + mov ax,bx + shl ax,1 + sub ax,1Eh + stosw + inc gs:nblogo +nothingcoord: + inc dx + inc dx + cmp dx,60h + jne short loc_6 + xor dx,dx + add si,110h + inc bx +loc_6: + loop loopcoord + + push ds + pop es + push gs + pop ds +masterloop: + inc logox ;++++ + inc data_10 + mov bl,data_10 + xor bh,bh + mov al,data_1[bx] + cbw + mov data_11,ax + add bl,zoomout + mov al,data_1[bx] + cbw + mov data_12,ax + mov cx,nblogo2 + push cx + push cx + mov si,logo2coord + +showlogo2: + lodsw + mov data_7,ax + lodsw + mov data_8,ax + mov data_9,0FFCEh + push cx + push si + mov si,offset data_8 + push si + mov di,offset data_9 + call sub_1 + mov si,offset data_7 + call sub_1 + pop di + call sub_1 + pop si + mov ax,100h + imul data_7 + mov bx,data_9 + add bx,140h + idiv bx + add ax,logo2X + mov bp,ax + mov ax,100h + imul data_8 + mov bx,data_9 + add bx,140h + idiv bx + add ax,logo2Y + mov bx,140h + imul bx + add ax,bp + mov di,ax + push si + sub si,logo2coord + shr si,1 + mov ds:data_16e[si],di + pop si + mov bx,data_9 + mov cl,4 + shr bx,cl + pop cx + mov al,17h + sub al,bl + mov ah,al + stosw + add di,ecartlogo2 + stosw + loop showlogo2 + + pop si + shl si,1 + shl si,1 + add si,logo2coord + mov cx,nblogo + +showlogo: + push cx + lodsw + imul data_12 + mov di,ax + lodsw + imul data_11 + sub di,ax + mov cl,7 + sar di,cl + add di,logoX + mov bx,di + sub si,4 + lodsw + imul data_11 + mov di,ax + lodsw + imul data_12 + add di,ax + sar di,cl + add di,logoy + mov ax,140h + imul di + add ax,bx + mov di,ax + pop cx + mov ax,cx + shl ax,1 + mov bx,data_17e + add bx,ax + mov [bx],di + mov al,28h + stosb + loop showlogo + + mov dx,3DAh + +synchro: + in al,dx + test al,8 + jnz synchro +synchroagain: + in al,dx + test al,8 + jz synchroagain + mov si,data_16e + pop cx + add cx,nblogo + add cx,14h + +showlogo2effect: + lodsw + mov di,ax + xor ax,ax + stosw + add di,ecartlogo2 + stosw + loop showlogo2effect + + in al,60h + cmp al,1 + je endofprog + jmp masterloop +endofprog: + mov ax,3 + int 10h + int 20h + ret + + +sub_1 proc near + mov ax,[si] + imul data_12 + mov bp,ax + mov ax,[di] + imul data_11 + sub bp,ax + mov cl,7 + sar bp,cl + push bp + mov ax,[si] + imul data_11 + mov bp,ax + mov ax,[di] + imul data_12 + add bp,ax + sar bp,cl + mov [di],bp + pop ax + mov [si],ax + retn +sub_1 endp + +showcrlf: + push ax bx + mov ax, 0E0Dh + xor bx, bx + int 10h + mov al, 0Ah + int 10h + pop bx ax +ret + +zerocurs: +push ax bx dx +mov ah,02h +mov bh,0 +mov dx,0 +int 10h +pop dx bx ax +ret + +showstr: + push ax bx si +again: + lodsb + or al,al + jz fin + cmp al,0Dh + jne noret + call showcrlf + jmp again +noret: + mov ah,0Eh + mov bx,colores + int 10h + jmp again + fin: + pop si bx ax + ret +logoX dw 0A0h ;++++ + + +data_1 db 0 + db 03h, 06h, 09h, 0Ch, 10h, 13h + db 16h, 19h, 1Ch, 1Fh + db '"%(+.1369