Merge branch 'release/2.0.0'
This commit is contained in:
commit
1e59fb2d04
Binary file not shown.
After Width: | Height: | Size: 64 KiB |
|
@ -0,0 +1,167 @@
|
||||||
|
## GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
|
![logo](https://www.gnu.org/graphics/lgplv3-with-text-154x68.png)
|
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
|
||||||
|
This version of the GNU Lesser General Public License incorporates
|
||||||
|
the terms and conditions of version 3 of the GNU General Public
|
||||||
|
License, supplemented by the additional permissions listed below.
|
||||||
|
|
||||||
|
0. Additional Definitions.
|
||||||
|
|
||||||
|
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||||
|
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||||
|
General Public License.
|
||||||
|
|
||||||
|
"The Library" refers to a covered work governed by this License,
|
||||||
|
other than an Application or a Combined Work as defined below.
|
||||||
|
|
||||||
|
An "Application" is any work that makes use of an interface provided
|
||||||
|
by the Library, but which is not otherwise based on the Library.
|
||||||
|
Defining a subclass of a class defined by the Library is deemed a mode
|
||||||
|
of using an interface provided by the Library.
|
||||||
|
|
||||||
|
A "Combined Work" is a work produced by combining or linking an
|
||||||
|
Application with the Library. The particular version of the Library
|
||||||
|
with which the Combined Work was made is also called the "Linked
|
||||||
|
Version".
|
||||||
|
|
||||||
|
The "Minimal Corresponding Source" for a Combined Work means the
|
||||||
|
Corresponding Source for the Combined Work, excluding any source code
|
||||||
|
for portions of the Combined Work that, considered in isolation, are
|
||||||
|
based on the Application, and not on the Linked Version.
|
||||||
|
|
||||||
|
The "Corresponding Application Code" for a Combined Work means the
|
||||||
|
object code and/or source code for the Application, including any data
|
||||||
|
and utility programs needed for reproducing the Combined Work from the
|
||||||
|
Application, but excluding the System Libraries of the Combined Work.
|
||||||
|
|
||||||
|
1. Exception to Section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
You may convey a covered work under sections 3 and 4 of this License
|
||||||
|
without being bound by section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
2. Conveying Modified Versions.
|
||||||
|
|
||||||
|
If you modify a copy of the Library, and, in your modifications, a
|
||||||
|
facility refers to a function or data to be supplied by an Application
|
||||||
|
that uses the facility (other than as an argument passed when the
|
||||||
|
facility is invoked), then you may convey a copy of the modified
|
||||||
|
version:
|
||||||
|
|
||||||
|
a) under this License, provided that you make a good faith effort to
|
||||||
|
ensure that, in the event an Application does not supply the
|
||||||
|
function or data, the facility still operates, and performs
|
||||||
|
whatever part of its purpose remains meaningful, or
|
||||||
|
|
||||||
|
b) under the GNU GPL, with none of the additional permissions of
|
||||||
|
this License applicable to that copy.
|
||||||
|
|
||||||
|
3. Object Code Incorporating Material from Library Header Files.
|
||||||
|
|
||||||
|
The object code form of an Application may incorporate material from
|
||||||
|
a header file that is part of the Library. You may convey such object
|
||||||
|
code under terms of your choice, provided that, if the incorporated
|
||||||
|
material is not limited to numerical parameters, data structure
|
||||||
|
layouts and accessors, or small macros, inline functions and templates
|
||||||
|
(ten or fewer lines in length), you do both of the following:
|
||||||
|
|
||||||
|
a) Give prominent notice with each copy of the object code that the
|
||||||
|
Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
4. Combined Works.
|
||||||
|
|
||||||
|
You may convey a Combined Work under terms of your choice that,
|
||||||
|
taken together, effectively do not restrict modification of the
|
||||||
|
portions of the Library contained in the Combined Work and reverse
|
||||||
|
engineering for debugging such modifications, if you also do each of
|
||||||
|
the following:
|
||||||
|
|
||||||
|
a) Give prominent notice with each copy of the Combined Work that
|
||||||
|
the Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
c) For a Combined Work that displays copyright notices during
|
||||||
|
execution, include the copyright notice for the Library among
|
||||||
|
these notices, as well as a reference directing the user to the
|
||||||
|
copies of the GNU GPL and this license document.
|
||||||
|
|
||||||
|
d) Do one of the following:
|
||||||
|
|
||||||
|
0) Convey the Minimal Corresponding Source under the terms of this
|
||||||
|
License, and the Corresponding Application Code in a form
|
||||||
|
suitable for, and under terms that permit, the user to
|
||||||
|
recombine or relink the Application with a modified version of
|
||||||
|
the Linked Version to produce a modified Combined Work, in the
|
||||||
|
manner specified by section 6 of the GNU GPL for conveying
|
||||||
|
Corresponding Source.
|
||||||
|
|
||||||
|
1) Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that (a) uses at run time
|
||||||
|
a copy of the Library already present on the user's computer
|
||||||
|
system, and (b) will operate properly with a modified version
|
||||||
|
of the Library that is interface-compatible with the Linked
|
||||||
|
Version.
|
||||||
|
|
||||||
|
e) Provide Installation Information, but only if you would otherwise
|
||||||
|
be required to provide such information under section 6 of the
|
||||||
|
GNU GPL, and only to the extent that such information is
|
||||||
|
necessary to install and execute a modified version of the
|
||||||
|
Combined Work produced by recombining or relinking the
|
||||||
|
Application with a modified version of the Linked Version. (If
|
||||||
|
you use option 4d0, the Installation Information must accompany
|
||||||
|
the Minimal Corresponding Source and Corresponding Application
|
||||||
|
Code. If you use option 4d1, you must provide the Installation
|
||||||
|
Information in the manner specified by section 6 of the GNU GPL
|
||||||
|
for conveying Corresponding Source.)
|
||||||
|
|
||||||
|
5. Combined Libraries.
|
||||||
|
|
||||||
|
You may place library facilities that are a work based on the
|
||||||
|
Library side by side in a single library together with other library
|
||||||
|
facilities that are not Applications and are not covered by this
|
||||||
|
License, and convey such a combined library under terms of your
|
||||||
|
choice, if you do both of the following:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work based
|
||||||
|
on the Library, uncombined with any other library facilities,
|
||||||
|
conveyed under the terms of this License.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library that part of it
|
||||||
|
is a work based on the Library, and explaining where to find the
|
||||||
|
accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
6. Revised Versions of the GNU Lesser General Public License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the GNU Lesser 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
|
||||||
|
Library as you received it specifies that a certain numbered version
|
||||||
|
of the GNU Lesser General Public License "or any later version"
|
||||||
|
applies to it, you have the option of following the terms and
|
||||||
|
conditions either of that published version or of any later version
|
||||||
|
published by the Free Software Foundation. If the Library as you
|
||||||
|
received it does not specify a version number of the GNU Lesser
|
||||||
|
General Public License, you may choose any version of the GNU Lesser
|
||||||
|
General Public License ever published by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Library as you received it specifies that a proxy can decide
|
||||||
|
whether future versions of the GNU Lesser General Public License shall
|
||||||
|
apply, that proxy's public statement of acceptance of any version is
|
||||||
|
permanent authorization for you to choose that version for the
|
||||||
|
Library.
|
|
@ -0,0 +1,60 @@
|
||||||
|
![logo](https://github.com/dahut87/cos2000v2/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é essentiellement en langage C mais il comporte aussi un peu d'assembleur X86.
|
||||||
|
|
||||||
|
#### 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 avec FPU intégré,
|
||||||
|
gestion de la mémoire paginée et mode protégé : Intel Pentium et supérieur.
|
||||||
|
|
||||||
|
#### Ai-je le droit de le copier, de le modifier, de le réutiliser, de le vendre ?
|
||||||
|
|
||||||
|
COS2000 est sous licence LGPL v3.0, en simplifiant un peu :
|
||||||
|
|
||||||
|
* COPIER - OUI
|
||||||
|
* MODIFIER - OUI
|
||||||
|
* REUTILISER - OUI en citant l'auteur
|
||||||
|
* VENDRE - NON
|
||||||
|
|
||||||
|
Les détails se trouvent dans le fichier `LICENSE.md`
|
||||||
|
|
||||||
|
![logo](https://www.gnu.org/graphics/lgplv3-with-text-154x68.png)
|
||||||
|
|
||||||
|
### En savoir plus...
|
||||||
|
|
||||||
|
#### Historique du projet
|
||||||
|
* Version 2.2fr - C en mode protégé Reprise du projet
|
||||||
|
* Version 2.1fr - C en mode protégé Abandon du projet
|
||||||
|
* Version 2.0 - C en mode protégé VGA text+pmode
|
||||||
|
* Version 1.x - Assembleur en mode réel
|
||||||
|
|
||||||
|
> “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,274 @@
|
||||||
|
[BITS 16]
|
||||||
|
[ORG 0x7C00]
|
||||||
|
|
||||||
|
section .text
|
||||||
|
|
||||||
|
start:
|
||||||
|
jmp near Boot
|
||||||
|
|
||||||
|
Disk_ID db "COS2000A" ;Fabricant + n° de série Formatage
|
||||||
|
Sectors_Size dw 512 ;Nombre d'octets/secteur
|
||||||
|
Sectors_Per_Cluster db 1 ;Nombre de secteurs/cluster
|
||||||
|
Reserved_Sectors dw 1 ;Nombre de secteurs réservé
|
||||||
|
Fats_Number db 2 ;Nombre de copies de la FAT
|
||||||
|
Fits_Number dw 224 ;Taille du répertoire racine
|
||||||
|
Sectors_Per_Disk dw 2880 ;Nombre secteurs du volume si < 32 Mo
|
||||||
|
Media_Descriptor db 0xF0 ;Descripteur de média
|
||||||
|
Sectors_Per_Fat dw 9 ;Nombre secteurs/FAT
|
||||||
|
Sectors_Per_Track dw 18 ;Nombre secteurs/piste
|
||||||
|
Heads_Number dw 2 ;Nombre de tete de lecture/écriture
|
||||||
|
Sectors_Hidden dd 0 ;Nombre de secteurs cachés
|
||||||
|
Sectors_Per_Disk2 dd 0 ;Nombre secteurs du volume si > 32 Mo
|
||||||
|
Boot_Drive db 0 ;Lecteur de démarrage
|
||||||
|
Reserved db 0 ;NA (pour NT seulement)
|
||||||
|
Extended_Boot_ID db 0x29 ;Signature Boot étendu 29h
|
||||||
|
Serial_Number dd 0x01020304 ;N° de série
|
||||||
|
Disk_Name db "COS2000 " ;Nom de volume
|
||||||
|
Fat_Type db "FAT12 " ;Type de système de fichiers
|
||||||
|
|
||||||
|
;Cpu_Message db "CPU test",0
|
||||||
|
Boot_Message db "Booting ",0
|
||||||
|
Finding_Message db "System ",0
|
||||||
|
Loading_Message db "Loading ",0
|
||||||
|
System_File db "SYSTEM SYS"
|
||||||
|
Is_Ok db "[ OK ]",0x0A,0x0D,0
|
||||||
|
Is_Failed db "[Failed]",0x0A,0x0D,"Press a key",0x0A,0x0D,0
|
||||||
|
The_Dot db '.',0
|
||||||
|
|
||||||
|
Boot_Error:
|
||||||
|
mov si,Is_Failed
|
||||||
|
call ShowString
|
||||||
|
mov ah,0
|
||||||
|
int 0x16
|
||||||
|
int 0x19
|
||||||
|
|
||||||
|
Boot_Ok:
|
||||||
|
mov al,[Stage]
|
||||||
|
cmp al,0
|
||||||
|
jz No_Ok
|
||||||
|
mov si,Is_Ok
|
||||||
|
call ShowString
|
||||||
|
No_Ok:
|
||||||
|
xor ah,ah
|
||||||
|
mov si,ax
|
||||||
|
add si,Boot_Message ;Cpu_Message
|
||||||
|
call ShowString
|
||||||
|
add byte [Stage],0x09
|
||||||
|
ret
|
||||||
|
|
||||||
|
Stage db 0
|
||||||
|
|
||||||
|
Boot:
|
||||||
|
push cs
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
pop ds
|
||||||
|
mov [Boot_Drive],dl
|
||||||
|
cli
|
||||||
|
mov ax,0x9000
|
||||||
|
mov ss,ax
|
||||||
|
mov sp,0xFFFF
|
||||||
|
sti
|
||||||
|
; call Detect_Cpu
|
||||||
|
; jc Boot_Error
|
||||||
|
call Boot_Ok
|
||||||
|
xor ax,ax
|
||||||
|
int 0x13
|
||||||
|
jc Boot_Error
|
||||||
|
mov cx,[Reserved_Sectors]
|
||||||
|
add cx,[Sectors_Hidden]
|
||||||
|
adc cx,[Sectors_Hidden+2]
|
||||||
|
mov di,Fat_Buffer
|
||||||
|
call ReadSector
|
||||||
|
jc Boot_Error
|
||||||
|
xor ax,ax
|
||||||
|
mov al,[Fats_Number]
|
||||||
|
mov bx,[Sectors_Per_Fat]
|
||||||
|
mul bx
|
||||||
|
add cx,ax
|
||||||
|
mov ax,32
|
||||||
|
mul word [Fits_Number]
|
||||||
|
div word [Sectors_Size]
|
||||||
|
add ax,cx
|
||||||
|
sub ax,2
|
||||||
|
mov word [Serial_Number],ax
|
||||||
|
xor dx,dx
|
||||||
|
call Boot_Ok
|
||||||
|
Find_System:
|
||||||
|
mov di,Buffer
|
||||||
|
call ReadSector
|
||||||
|
jc Near Boot_Error
|
||||||
|
xor bx,bx
|
||||||
|
Next_Root_Entrie:
|
||||||
|
cmp byte [di],0
|
||||||
|
je near Boot_Error
|
||||||
|
push di
|
||||||
|
push cx
|
||||||
|
mov si,System_File
|
||||||
|
mov cx,11
|
||||||
|
rep cmpsb
|
||||||
|
pop cx
|
||||||
|
pop di
|
||||||
|
je System_Found
|
||||||
|
add di,32
|
||||||
|
add bx,32
|
||||||
|
inc dx
|
||||||
|
cmp dx,[Fits_Number]
|
||||||
|
ja near Boot_Error
|
||||||
|
cmp bx,[Sectors_Size]
|
||||||
|
jb Next_Root_Entrie
|
||||||
|
inc cx
|
||||||
|
jmp Find_System
|
||||||
|
System_Found:
|
||||||
|
mov cx,[di+26]
|
||||||
|
mov ax,0x0071
|
||||||
|
mov es,ax
|
||||||
|
push es
|
||||||
|
mov di,0x100
|
||||||
|
push di
|
||||||
|
call Boot_Ok
|
||||||
|
mov si,The_Dot
|
||||||
|
Resume_Loading:
|
||||||
|
cmp cx,0x0FF0
|
||||||
|
jae Finish_Loading
|
||||||
|
push cx
|
||||||
|
add cx,word [Serial_Number]
|
||||||
|
call ReadSector
|
||||||
|
pop cx
|
||||||
|
jc near Boot_Error
|
||||||
|
call ShowString
|
||||||
|
add di,[Sectors_Size]
|
||||||
|
call NextFatGroup
|
||||||
|
jc near Boot_Error
|
||||||
|
jmp Resume_Loading
|
||||||
|
Finish_Loading:
|
||||||
|
call Boot_Ok
|
||||||
|
retf
|
||||||
|
|
||||||
|
;====================READSECTOR=======================
|
||||||
|
;Lit le secteur logique LBA CX et le met en es:di
|
||||||
|
;-> CX (limité à 65536 secteurs, soit 32 Mo avec secteur 512 octets)
|
||||||
|
;<- Flag Carry si erreur
|
||||||
|
;=====================================================
|
||||||
|
ReadSector:
|
||||||
|
pusha
|
||||||
|
mov ax,cx
|
||||||
|
xor dx,dx
|
||||||
|
div word [Sectors_Per_Track]
|
||||||
|
inc dl
|
||||||
|
mov bl,dl
|
||||||
|
xor dx,dx
|
||||||
|
div word [Heads_Number]
|
||||||
|
mov dh, [Boot_Drive]
|
||||||
|
xchg dl,dh
|
||||||
|
mov cx,ax
|
||||||
|
xchg cl,ch
|
||||||
|
shl cl,6
|
||||||
|
or cl, bl
|
||||||
|
mov bx,di
|
||||||
|
mov si, 4
|
||||||
|
mov al, 1
|
||||||
|
Read_Again:
|
||||||
|
mov ah, 2
|
||||||
|
int 0x13
|
||||||
|
jnc Read_Done
|
||||||
|
dec si
|
||||||
|
jnz Read_Again
|
||||||
|
Read_Done:
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
;===================NEXTFATGROUP======================
|
||||||
|
;Renvoie en CX le groupe qui succède dans la FAT le groupe CX
|
||||||
|
;-> CX
|
||||||
|
;<-
|
||||||
|
;=====================================================
|
||||||
|
NextFatGroup:
|
||||||
|
push bx
|
||||||
|
push dx
|
||||||
|
push di
|
||||||
|
mov ax,cx
|
||||||
|
mov bx,ax
|
||||||
|
and bx,0000000000000001b
|
||||||
|
shr ax,1
|
||||||
|
mov cx,3
|
||||||
|
mul cx
|
||||||
|
mov di,Fat_Buffer
|
||||||
|
add di,ax
|
||||||
|
cmp bx,0
|
||||||
|
jnz Even_Group
|
||||||
|
Odd_Group:
|
||||||
|
mov dx,[di]
|
||||||
|
and dx,0x0FFF
|
||||||
|
mov cx,dx
|
||||||
|
jmp Next_Group_Found
|
||||||
|
Even_Group:
|
||||||
|
mov dx,[di+1]
|
||||||
|
and dx,0xFFF0
|
||||||
|
shr dx,4
|
||||||
|
mov cx,dx
|
||||||
|
Next_Group_Found:
|
||||||
|
pop di
|
||||||
|
pop dx
|
||||||
|
pop bx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;======================SHOWSTR========================
|
||||||
|
;Affiche la chaine de caractère pointé par ds:si à l'écran
|
||||||
|
;-> DS, SI
|
||||||
|
;<- Flag Carry si erreur
|
||||||
|
;=====================================================
|
||||||
|
ShowString:
|
||||||
|
pusha
|
||||||
|
Next_Char:
|
||||||
|
lodsb
|
||||||
|
or al,al
|
||||||
|
jz End_Show
|
||||||
|
mov ah,0x0E
|
||||||
|
mov bx,0x07
|
||||||
|
int 0x10
|
||||||
|
jmp Next_Char
|
||||||
|
End_Show:
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
;======================DETECTCPU======================
|
||||||
|
;Detecte si le processeur est un 386 au mini
|
||||||
|
;->
|
||||||
|
;<- Flag Carry si erreur
|
||||||
|
;=====================================================
|
||||||
|
;Detect_Cpu:
|
||||||
|
; push ax ; test if 8088/8086 is present (flag bits 12-15 will be set)
|
||||||
|
; xor ah,ah ; ah = 0
|
||||||
|
; push ax ; copy ax into the flags
|
||||||
|
; popf ; with bits 12-15 clear
|
||||||
|
; pushf ; Read flags back into ax
|
||||||
|
; pop ax
|
||||||
|
; and ah,0xF0 ; check if bits 12-15 are set
|
||||||
|
; cmp ah,0xF0
|
||||||
|
; je No_386 ; no 386 detected (8088/8086 present)
|
||||||
|
; ; check for a 286 (bits 12-15 are clear)
|
||||||
|
; mov ah,0xF0 ; set bits 12-15
|
||||||
|
; push ax ; copy ax onto the flags
|
||||||
|
; popf
|
||||||
|
; pushf ; copy the flags into ax
|
||||||
|
; pop ax
|
||||||
|
; and ah,0xF0 ; check if bits 12-15 are clear
|
||||||
|
; jz No_386 ; no 386 detected (80286 present)
|
||||||
|
; clc
|
||||||
|
; ret
|
||||||
|
;No_386:
|
||||||
|
; stc
|
||||||
|
; ret
|
||||||
|
|
||||||
|
times 510-($-$$) db ' '
|
||||||
|
|
||||||
|
dw 0xAA55
|
||||||
|
|
||||||
|
Buffer equ $
|
||||||
|
Fat_Buffer equ $+512
|
||||||
|
|
||||||
|
section .bss
|
||||||
|
|
||||||
|
;Buffer resb 512
|
||||||
|
;Fat_Buffer resb 10000
|
|
@ -0,0 +1,270 @@
|
||||||
|
[BITS 16]
|
||||||
|
[ORG 0x7C00]
|
||||||
|
|
||||||
|
section .text
|
||||||
|
|
||||||
|
start:
|
||||||
|
jmp near Boot
|
||||||
|
|
||||||
|
Disk_ID db "COS2000A" ;Fabricant + n° de série Formatage
|
||||||
|
Sectors_Size dw 512 ;Nombre d'octets/secteur
|
||||||
|
Sectors_Per_Cluster db 4 ;Nombre de secteurs/cluster
|
||||||
|
Reserved_Sectors dw 1 ;Nombre de secteurs réservé
|
||||||
|
Fats_Number db 2 ;Nombre de copies de la FAT
|
||||||
|
Fits_Number dw 512 ;Taille du répertoire racine
|
||||||
|
Sectors_Per_Disk dw 2880 ;Nombre secteurs du volume si < 32 Mo
|
||||||
|
Media_Descriptor db 0xF8 ;Descripteur de média
|
||||||
|
Sectors_Per_Fat dw 207 ;Nombre secteurs/FAT
|
||||||
|
Sectors_Per_Track dw 18 ;Nombre secteurs/piste
|
||||||
|
Heads_Number dw 38 ;Nombre de tete de lecture/écriture
|
||||||
|
Sectors_Hidden dd 16 ;Nombre de secteurs cachés
|
||||||
|
Sectors_Per_Disk2 dd 39 ;Nombre secteurs du volume si > 32 Mo
|
||||||
|
Boot_Drive db 0x80 ;Lecteur de démarrage
|
||||||
|
Reserved db 0 ;NA (pour NT seulement)
|
||||||
|
Extended_Boot_ID db 0x29 ;Signature Boot étendu 29h
|
||||||
|
Serial_Number dd 0x01020304 ;N° de série
|
||||||
|
Disk_Name db "COS2000 " ;Nom de volume
|
||||||
|
Fat_Type db "FAT16 " ;Type de système de fichiers
|
||||||
|
|
||||||
|
;Cpu_Message db "CPU test",0
|
||||||
|
;Boot_Message db "Booting ",0
|
||||||
|
;Finding_Message db "System ",0
|
||||||
|
;Loading_Message db "Loading ",0
|
||||||
|
System_File db "SYSTEM SYS"
|
||||||
|
Is_Ok db "[ OK ]",0x0A,0x0D,0
|
||||||
|
Is_Failed db "[Failed]",0x0A,0x0D,"Press a key",0x0A,0x0D,0
|
||||||
|
The_Dot db '.',0
|
||||||
|
|
||||||
|
Boot_Error:
|
||||||
|
mov si,Is_Failed
|
||||||
|
call ShowString
|
||||||
|
mov ah,0
|
||||||
|
int 0x16
|
||||||
|
int 0x19
|
||||||
|
|
||||||
|
Boot_Ok:
|
||||||
|
; mov al,[Stage]
|
||||||
|
; cmp al,0
|
||||||
|
; jz No_Ok
|
||||||
|
mov si,Is_Ok
|
||||||
|
call ShowString
|
||||||
|
;No_Ok:
|
||||||
|
; xor ah,ah
|
||||||
|
; mov si,ax
|
||||||
|
; add si,Boot_Message ;Cpu_Message
|
||||||
|
; call ShowString
|
||||||
|
; add byte [Stage],0x09
|
||||||
|
ret
|
||||||
|
;
|
||||||
|
;Stage db 0
|
||||||
|
|
||||||
|
Boot:
|
||||||
|
push cs
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
pop ds
|
||||||
|
mov [Boot_Drive],dl
|
||||||
|
cli
|
||||||
|
mov ax,0x9000
|
||||||
|
mov ss,ax
|
||||||
|
mov sp,0xFFFF
|
||||||
|
sti
|
||||||
|
; call Detect_Cpu
|
||||||
|
; jc Boot_Error
|
||||||
|
; call Boot_Ok
|
||||||
|
xor ax,ax
|
||||||
|
int 0x13
|
||||||
|
; jc Boot_Error
|
||||||
|
xor eax,eax
|
||||||
|
add ax,[Reserved_Sectors]
|
||||||
|
add ecx,eax
|
||||||
|
mov di,Fat_Buffer
|
||||||
|
call ReadSector
|
||||||
|
jc Boot_Error
|
||||||
|
xor eax,eax
|
||||||
|
mov al,[Fats_Number]
|
||||||
|
mov bx,[Sectors_Per_Fat]
|
||||||
|
mul bx
|
||||||
|
add ecx,eax
|
||||||
|
mov ax,32
|
||||||
|
mul word [Fits_Number]
|
||||||
|
div word [Sectors_Size]
|
||||||
|
add eax,ecx
|
||||||
|
mov dword [Serial_Number],eax
|
||||||
|
xor dx,dx
|
||||||
|
; call Boot_Ok
|
||||||
|
Find_System:
|
||||||
|
mov di,Buffer
|
||||||
|
call ReadSector
|
||||||
|
jc near Boot_Error
|
||||||
|
xor bx,bx
|
||||||
|
Next_Root_Entrie:
|
||||||
|
cmp byte [di],0
|
||||||
|
je near Boot_Error
|
||||||
|
push di
|
||||||
|
push cx
|
||||||
|
mov si,System_File
|
||||||
|
mov cx,11
|
||||||
|
rep cmpsb
|
||||||
|
pop cx
|
||||||
|
pop di
|
||||||
|
je System_Found
|
||||||
|
add di,32
|
||||||
|
add bx,32
|
||||||
|
inc dx
|
||||||
|
cmp dx,[Fits_Number]
|
||||||
|
ja near Boot_Error
|
||||||
|
cmp bx,[Sectors_Size]
|
||||||
|
jb Next_Root_Entrie
|
||||||
|
inc ecx
|
||||||
|
jmp Find_System
|
||||||
|
System_Found:
|
||||||
|
xor ecx,ecx
|
||||||
|
mov cx,[di+26]
|
||||||
|
mov ax,0x0071
|
||||||
|
mov es,ax
|
||||||
|
push es
|
||||||
|
mov di,0x100
|
||||||
|
push di
|
||||||
|
; call Boot_Ok
|
||||||
|
mov si,The_Dot
|
||||||
|
Resume_Loading:
|
||||||
|
cmp cx,0x0FFF0
|
||||||
|
jae Finish_Loading
|
||||||
|
call ReadGroup
|
||||||
|
jc near Boot_Error
|
||||||
|
call ShowString
|
||||||
|
mov bx,cx
|
||||||
|
shl bx,1
|
||||||
|
mov cx,[bx+Fat_Buffer]
|
||||||
|
jmp Resume_Loading
|
||||||
|
Finish_Loading:
|
||||||
|
call Boot_Ok
|
||||||
|
retf
|
||||||
|
|
||||||
|
;====================READSECTOR=======================
|
||||||
|
;Lit le secteur logique LBA ECX et le met en es:di
|
||||||
|
;-> ECX (limité à 2^32 secteurs, soit 2 To avec secteur 512 octets)
|
||||||
|
;<- Flag Carry si erreur
|
||||||
|
;=====================================================
|
||||||
|
ReadSector:
|
||||||
|
pushad
|
||||||
|
mov ax, cx
|
||||||
|
ror ecx,16
|
||||||
|
mov dx,cx
|
||||||
|
rol ecx,16
|
||||||
|
cmp ecx,4128705
|
||||||
|
ja Extended_CHS
|
||||||
|
div word [Sectors_Per_Track]
|
||||||
|
inc dl
|
||||||
|
mov bl, dl
|
||||||
|
xor dx,dx
|
||||||
|
div word [Heads_Number]
|
||||||
|
mov dh, [Boot_Drive]
|
||||||
|
xchg dl, dh
|
||||||
|
mov cx, ax
|
||||||
|
xchg cl, ch
|
||||||
|
shl cl, 6
|
||||||
|
or cl, bl
|
||||||
|
mov bx, di
|
||||||
|
mov si, 4
|
||||||
|
mov al, 1
|
||||||
|
Read_Again:
|
||||||
|
mov ah, 2
|
||||||
|
int 0x13
|
||||||
|
jnc Read_Done
|
||||||
|
dec si
|
||||||
|
jnz Read_Again
|
||||||
|
Read_Done:
|
||||||
|
popad
|
||||||
|
ret
|
||||||
|
Extended_CHS:
|
||||||
|
mov si,ECHS_Block
|
||||||
|
mov byte [si+Sizes],0x10
|
||||||
|
mov byte [si+Reserve],0x01
|
||||||
|
mov byte [si+NumSectors],0x01
|
||||||
|
mov [si+Adressseg],es
|
||||||
|
mov [si+Adressoff],di
|
||||||
|
mov [si+SectorLow],ax
|
||||||
|
mov [si+SectorHigh],dx
|
||||||
|
mov di,4
|
||||||
|
mov dl,[Boot_Drive]
|
||||||
|
Read_AgainX:
|
||||||
|
mov ah, 42h
|
||||||
|
int 13h
|
||||||
|
jnc Read_Done
|
||||||
|
dec di
|
||||||
|
jnz Read_AgainX
|
||||||
|
|
||||||
|
;======================READGROUP======================
|
||||||
|
;lit le groupe cx en es:di et incr‚mente DI
|
||||||
|
;-> cx, es:di
|
||||||
|
;<- di, Flag Carry si erreur
|
||||||
|
;=====================================================
|
||||||
|
ReadGroup:
|
||||||
|
push ax
|
||||||
|
push cx
|
||||||
|
push dx
|
||||||
|
mov al,[Sectors_Per_Cluster]
|
||||||
|
sub cx,2
|
||||||
|
xor ah,ah
|
||||||
|
mul cx
|
||||||
|
mov cx,dx
|
||||||
|
shl ecx,16
|
||||||
|
mov cx,ax
|
||||||
|
add ecx,dword [Serial_Number]
|
||||||
|
mov al,[Sectors_Per_Cluster]
|
||||||
|
read:
|
||||||
|
call ReadSector
|
||||||
|
jc errors
|
||||||
|
inc ecx
|
||||||
|
add di,[Sectors_Size]
|
||||||
|
dec al
|
||||||
|
jnz read
|
||||||
|
clc
|
||||||
|
errors:
|
||||||
|
pop dx
|
||||||
|
pop cx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;======================SHOWSTR========================
|
||||||
|
;Affiche la chaine de caractère pointé par ds:si à l'écran
|
||||||
|
;-> DS, SI
|
||||||
|
;<- Flag Carry si erreur
|
||||||
|
;=====================================================
|
||||||
|
ShowString:
|
||||||
|
;push ax
|
||||||
|
;push bx
|
||||||
|
;push si
|
||||||
|
pusha
|
||||||
|
Next_Char:
|
||||||
|
lodsb
|
||||||
|
or al,al
|
||||||
|
jz End_Show
|
||||||
|
mov ah,0x0E
|
||||||
|
mov bx,0x07
|
||||||
|
int 0x10
|
||||||
|
jmp Next_Char
|
||||||
|
End_Show:
|
||||||
|
;pop si
|
||||||
|
;pop bx
|
||||||
|
;pop ax
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
times 510-($-$$) db ' '
|
||||||
|
|
||||||
|
dw 0xAA55
|
||||||
|
|
||||||
|
ECHS_Block equ $
|
||||||
|
Buffer equ $+26
|
||||||
|
Fat_Buffer equ $+26+512
|
||||||
|
|
||||||
|
section .bss
|
||||||
|
|
||||||
|
%include "echs.h"
|
||||||
|
|
||||||
|
;ECHS_Block resb 24
|
||||||
|
;Buffer resb 512
|
||||||
|
;Fat_Buffer resb 10000
|
|
@ -0,0 +1,88 @@
|
||||||
|
[BITS 16]
|
||||||
|
[ORG 0x100]
|
||||||
|
|
||||||
|
section .text
|
||||||
|
|
||||||
|
start:
|
||||||
|
mov ah,09
|
||||||
|
mov dx,msg
|
||||||
|
int 0x21
|
||||||
|
cmp byte [0x80],2
|
||||||
|
jne near error
|
||||||
|
mov ax,0x3D02
|
||||||
|
mov dx,name
|
||||||
|
int 0x21
|
||||||
|
jc near error
|
||||||
|
mov bx,ax
|
||||||
|
mov ax,0x4202
|
||||||
|
xor cx,cx
|
||||||
|
xor dx,dx
|
||||||
|
int 0x21
|
||||||
|
jc error
|
||||||
|
cmp dx,0
|
||||||
|
jne error
|
||||||
|
cmp ax,512
|
||||||
|
jne error
|
||||||
|
mov ax,0x4200
|
||||||
|
xor cx,cx
|
||||||
|
xor dx,dx
|
||||||
|
int 0x21
|
||||||
|
jc error
|
||||||
|
mov ah,0x3F
|
||||||
|
mov cx,512
|
||||||
|
mov dx,buffer2
|
||||||
|
int 0x21
|
||||||
|
jc error
|
||||||
|
cmp word [buffer2+510],0xAA55
|
||||||
|
jne error
|
||||||
|
mov al,[0x82]
|
||||||
|
cmp al,'z'
|
||||||
|
ja error
|
||||||
|
cmp al,'a'
|
||||||
|
jb verif
|
||||||
|
sub al,'a'-'A'
|
||||||
|
verif:
|
||||||
|
cmp al,'Z'
|
||||||
|
ja error
|
||||||
|
cmp al,'A'
|
||||||
|
jb error
|
||||||
|
sub al,'A'
|
||||||
|
mov bp,ax
|
||||||
|
mov [segs],cs
|
||||||
|
mov cx,0xFFFF
|
||||||
|
mov bx,packet
|
||||||
|
int 0x25
|
||||||
|
pop ax
|
||||||
|
mov si,buffer+3
|
||||||
|
mov di,buffer2+3
|
||||||
|
mov cx,59
|
||||||
|
rep movsb
|
||||||
|
mov ax,bp
|
||||||
|
mov word [offs],buffer2
|
||||||
|
mov cx,0xFFFF
|
||||||
|
mov bx,packet
|
||||||
|
int 0x26
|
||||||
|
pop ax
|
||||||
|
jc error
|
||||||
|
mov ah,09
|
||||||
|
mov dx,msgok
|
||||||
|
int 0x21
|
||||||
|
ret
|
||||||
|
|
||||||
|
error:
|
||||||
|
mov ah,09
|
||||||
|
mov dx,msgerror
|
||||||
|
int 0x21
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
packet dd 0
|
||||||
|
dw 1
|
||||||
|
offs dw buffer
|
||||||
|
segs dw 0
|
||||||
|
name db "boot.bin",0
|
||||||
|
msg db 0x0D,0x0A,"CopyBoot V1.0 by nico",0x0D,0x0A,"Copyright 2002",0x0D,0x0A,'$'
|
||||||
|
msgok db "Installation of bootsector realized",0x0D,0x0A,'$'
|
||||||
|
msgerror db "Installation of bootsector failed",0x0D,0x0A,'$'
|
||||||
|
buffer equ $
|
||||||
|
buffer2 equ $+512
|
|
@ -0,0 +1,217 @@
|
||||||
|
[BITS 16]
|
||||||
|
[ORG 0x7C00]
|
||||||
|
|
||||||
|
section .text
|
||||||
|
|
||||||
|
start:
|
||||||
|
jmp near boot
|
||||||
|
|
||||||
|
Disk_ID db "COS2000A" ;Fabricant + n° de série Formatage
|
||||||
|
Sectors_Size dw 512 ;Nombre d"octets/secteur
|
||||||
|
Sectors_Per_Cluster db 1 ;Nombre de secteurs/cluster
|
||||||
|
Reserved_Sectors dw 1 ;Nombre de secteurs réservé
|
||||||
|
Fats_Number db 2 ;Nombre de copies de la FAT
|
||||||
|
Fits_Number dw 224 ;Taille du répertoire racine
|
||||||
|
Sectors_Per_Disk dw 2880 ;Nombre secteurs du volume si < 32 Mo
|
||||||
|
Media_Descriptor db 0xF0 ;Descripteur de média
|
||||||
|
Sectors_Per_Fat dw 9 ;Nombre secteurs/FAT
|
||||||
|
Sectors_Per_Track dw 18 ;Nombre secteurs/piste
|
||||||
|
Heads_Number dw 2 ;Nombre de tete de lecture/écriture
|
||||||
|
Sectors_Hidden dd 0 ;Nombre de secteurs cachés
|
||||||
|
Sectors_Per_Disk2 dd 0 ;Nombre secteurs du volume si > 32 Mo
|
||||||
|
Boot_Drive db 0 ;Lecteur de démarrage
|
||||||
|
Reserved db 0 ;NA (pour NT seulement)
|
||||||
|
Extended_Boot_ID db 0x29 ;Signature Boot étendu 29h
|
||||||
|
Serial_Number dd 0x01020304 ;N° de série
|
||||||
|
Disk_Name db "COS2000 " ;Nom de volume
|
||||||
|
Fat_Type db "FAT12 " ;Type de système de fichiers
|
||||||
|
|
||||||
|
Loading_Ok db "Secteur en execution",0x0A,0x0D,0
|
||||||
|
Reg_Names db "cs ",0
|
||||||
|
db "ds ",0
|
||||||
|
db "es ",0
|
||||||
|
db "fs ",0
|
||||||
|
db "gs ",0
|
||||||
|
db "ss ",0
|
||||||
|
db "eax",0
|
||||||
|
db "ebx",0
|
||||||
|
db "ecx",0
|
||||||
|
db "edx",0
|
||||||
|
db "esi",0
|
||||||
|
db "edi",0
|
||||||
|
db "esp",0
|
||||||
|
db "ebp",0
|
||||||
|
db "eip",0
|
||||||
|
db "FLG",0
|
||||||
|
db "cr0",0
|
||||||
|
db "cr1",0
|
||||||
|
db "cr2",0
|
||||||
|
db "cr3",0
|
||||||
|
|
||||||
|
Return db 0x0A,0x0D,0
|
||||||
|
|
||||||
|
Numbers equ 20
|
||||||
|
|
||||||
|
boot:
|
||||||
|
mov [cs:segms],cs
|
||||||
|
mov [cs:segms+4],ds
|
||||||
|
mov [cs:segms+8],es
|
||||||
|
mov [cs:segms+12],fs
|
||||||
|
mov [cs:segms+16],gs
|
||||||
|
mov [cs:segms+20],ss
|
||||||
|
mov [cs:segms+24],eax
|
||||||
|
mov [cs:segms+28],ebx
|
||||||
|
mov [cs:segms+32],ecx
|
||||||
|
mov [cs:segms+36],edx
|
||||||
|
mov [cs:segms+40],esi
|
||||||
|
mov [cs:segms+44],edi
|
||||||
|
mov [cs:segms+48],esp
|
||||||
|
mov [cs:segms+52],ebp
|
||||||
|
IP:
|
||||||
|
mov word [cs:segms+56],IP
|
||||||
|
mov word [cs:segms+58],0
|
||||||
|
pushfd
|
||||||
|
pop dword [cs:segms+60]
|
||||||
|
mov eax,cr0
|
||||||
|
mov [cs:segms+64],eax
|
||||||
|
mov eax,cr0
|
||||||
|
mov [cs:segms+68],eax
|
||||||
|
mov eax,cr2
|
||||||
|
mov [cs:segms+72],eax
|
||||||
|
mov eax,cr3
|
||||||
|
mov [cs:segms+76],eax
|
||||||
|
cli
|
||||||
|
mov ax,0x9000
|
||||||
|
mov ss,ax
|
||||||
|
mov sp,0xFFFF
|
||||||
|
sti
|
||||||
|
push cs
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
pop ds
|
||||||
|
mov si,Loading_Ok
|
||||||
|
call ShowString
|
||||||
|
xor bx,bx
|
||||||
|
Show_All_Regs:
|
||||||
|
mov si,Reg_Names
|
||||||
|
shl bx,2
|
||||||
|
add si,bx
|
||||||
|
call ShowString
|
||||||
|
mov al,":"
|
||||||
|
call ShowChar
|
||||||
|
mov si,segms
|
||||||
|
mov edx,[bx+si]
|
||||||
|
shr bx,2
|
||||||
|
mov cx,32
|
||||||
|
cmp bx,6
|
||||||
|
jae Reg_Size_32
|
||||||
|
mov cx,16
|
||||||
|
Reg_Size_32:
|
||||||
|
call ShowHex
|
||||||
|
mov si,Return
|
||||||
|
call ShowString
|
||||||
|
inc bx
|
||||||
|
cmp bx,Numbers
|
||||||
|
jb Show_All_Regs
|
||||||
|
Halting_Cpu:
|
||||||
|
jmp Halting_Cpu
|
||||||
|
|
||||||
|
;==================SHOWHEX==================
|
||||||
|
;Affiche un nombre hexadécimal EDX de taille CX aprés le curseur
|
||||||
|
;-> EDX un entier, CX la taille
|
||||||
|
;<-
|
||||||
|
;===========================================
|
||||||
|
ShowHex:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push edx
|
||||||
|
mov ax,cx
|
||||||
|
shr ax,2
|
||||||
|
sub cx,32
|
||||||
|
neg cx
|
||||||
|
shl edx,cl
|
||||||
|
xchg ax,cx
|
||||||
|
Hex_Decompose:
|
||||||
|
rol edx,4
|
||||||
|
mov bx,dx
|
||||||
|
and bx,0x0F
|
||||||
|
mov al,[cs:bx+Hex_Table]
|
||||||
|
call ShowChar
|
||||||
|
dec cl
|
||||||
|
jnz Hex_Decompose
|
||||||
|
pop edx
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
Hex_Table db "0123456789ABCDEF"
|
||||||
|
|
||||||
|
;===================CLS====================
|
||||||
|
;Efface l"écran
|
||||||
|
;->
|
||||||
|
;<-
|
||||||
|
;==========================================
|
||||||
|
Cls:
|
||||||
|
push ax
|
||||||
|
mov ax,0x0003
|
||||||
|
int 0x10
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;================SHOWCHAR==================
|
||||||
|
;Affiche un caractère pointé dans AL
|
||||||
|
;-> AL
|
||||||
|
;<-
|
||||||
|
;==========================================
|
||||||
|
ShowChar:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
mov ah,0x0E
|
||||||
|
mov bx,0x07
|
||||||
|
int 0x10
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;===================SHOWSTR================
|
||||||
|
;Affiche une chaine de caractère pointé par SI
|
||||||
|
;-> SI pointe une chaine
|
||||||
|
;<-
|
||||||
|
;==========================================
|
||||||
|
ShowString:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push si
|
||||||
|
cld
|
||||||
|
Show_Next_Char:
|
||||||
|
lodsb
|
||||||
|
or al,al
|
||||||
|
jz String_Showed
|
||||||
|
call ShowChar
|
||||||
|
jmp Show_Next_Char
|
||||||
|
String_Showed:
|
||||||
|
pop si
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=================WAITKEY=================
|
||||||
|
;Attend l"appuie d"une touche et
|
||||||
|
;renvoie en AL la touche appuyée
|
||||||
|
;->
|
||||||
|
;<- AL
|
||||||
|
;=========================================
|
||||||
|
WaitKey:
|
||||||
|
mov ax,0x00
|
||||||
|
int 0x16
|
||||||
|
ret
|
||||||
|
|
||||||
|
times 510-($-$$) db ' '
|
||||||
|
|
||||||
|
dw 0xAA55
|
||||||
|
|
||||||
|
section .bss
|
||||||
|
|
||||||
|
segms resb 10000
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
struc echs
|
||||||
|
Sizes resb 1
|
||||||
|
Reserve resb 1
|
||||||
|
NumSectors resw 1
|
||||||
|
Adressoff resw 1
|
||||||
|
Adressseg resw 1
|
||||||
|
SectorLow resw 1
|
||||||
|
SectorHigh resw 1
|
||||||
|
Dummy resq 1
|
||||||
|
endstuc
|
|
@ -0,0 +1,24 @@
|
||||||
|
all: makall
|
||||||
|
|
||||||
|
makall: boot12.bin boot16.bin boottest.bin bootcp.com
|
||||||
|
sync
|
||||||
|
|
||||||
|
boot12.bin:
|
||||||
|
nasm -f bin -o boot12.bin boot12.asm
|
||||||
|
|
||||||
|
boot16.bin:
|
||||||
|
nasm -f bin -o boot16.bin boot16.asm
|
||||||
|
|
||||||
|
boottest.bin:
|
||||||
|
nasm -f bin -o boottest.bin boottest.asm
|
||||||
|
|
||||||
|
bootcp.com:
|
||||||
|
nasm -f bin -o bootcp.com bootcp.asm
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o
|
||||||
|
rm -f *.bin
|
||||||
|
rm -f *.sys
|
||||||
|
rm -f *.com
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
all: makall
|
||||||
|
|
||||||
|
makall: vga/vga.o
|
||||||
|
sync
|
||||||
|
|
||||||
|
clean:
|
||||||
|
(cd vga; make clean)
|
||||||
|
|
||||||
|
vga/vga.o:
|
||||||
|
(cd vga; make)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
FREEC=gcc -O4 -nostdinc -ffreestanding -fno-builtin -fomit-frame-pointer -Wall -I ../../Include -c -o
|
||||||
|
PARTIAL=-r
|
||||||
|
OBJS= vgahard.o \
|
||||||
|
vgatxt.o
|
||||||
|
|
||||||
|
all:
|
||||||
|
nasm -f elf -o vgahard.o vgahard.asm
|
||||||
|
|
||||||
|
$(FREEC) vgatxt.o vgatxt.c
|
||||||
|
|
||||||
|
ld $(PARTIAL) -o vga.o $(OBJS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o
|
||||||
|
rm -f *.bin
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[BITS 32]
|
||||||
|
|
||||||
|
|
||||||
|
SECTION .text
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include <vga.h>
|
|
@ -0,0 +1,23 @@
|
||||||
|
#include "types.h"
|
||||||
|
#define sti() __asm__ ("sti"::)
|
||||||
|
#define cli() __asm__ ("cli"::)
|
||||||
|
#define nop() __asm__ ("nop"::)
|
||||||
|
#define iret() __asm__ ("iret"::)
|
||||||
|
|
||||||
|
#define outb(port,value) \
|
||||||
|
asm volatile ("outb %%al,%%dx"::"d" (port), "a" (value));
|
||||||
|
|
||||||
|
#define outw(port,value) \
|
||||||
|
asm volatile ("outb %%ax,%%dx"::"d" (port), "a" (value));
|
||||||
|
|
||||||
|
#define inb(port) ({ \
|
||||||
|
u8 _v; \
|
||||||
|
asm volatile ("inb %%dx,%%al" : "=a" (_v) : "d" (port)); \
|
||||||
|
_v; \
|
||||||
|
})
|
||||||
|
|
||||||
|
#define inw(port) ({ \
|
||||||
|
u16 _v; \
|
||||||
|
asm volatile ("inw %%dx,%%ax" : "=a" (_v) : "d"(port)); \
|
||||||
|
_v; \
|
||||||
|
})
|
|
@ -0,0 +1,3 @@
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
void memset(void *dst, u8 val, u16 count,u32 size);
|
|
@ -0,0 +1,11 @@
|
||||||
|
#ifndef I386_TYPE
|
||||||
|
#define I386_TYPE
|
||||||
|
typedef unsigned char u8;
|
||||||
|
typedef unsigned short u16;
|
||||||
|
typedef unsigned int u32;
|
||||||
|
typedef unsigned char uchar;
|
||||||
|
typedef int bool;
|
||||||
|
#define true 1;
|
||||||
|
#define false 0;
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
#define TEXTSCREEN 0xB8000 /* debut de la memoire video texte*/
|
||||||
|
#define GRPHSCREEN 0xA0000 /* debut de la memoire video graphique*/
|
||||||
|
|
||||||
|
typedef u8 mode_def[64];
|
||||||
|
|
||||||
|
void print (u8* string);
|
||||||
|
void cls (void);
|
||||||
|
u16 setvmode(u8);
|
|
@ -0,0 +1,375 @@
|
||||||
|
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||||||
|
;³ COS 2000 ³
|
||||||
|
;³ http://www.multimania.com/cos2000 ³
|
||||||
|
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
;³ D I S K I M A G E ³
|
||||||
|
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
;³ Fonction : Programme permettant de r‚aliser des images dique dur d'³
|
||||||
|
;³ une disquettes. ³
|
||||||
|
;³ ³
|
||||||
|
;³ Appel : Diskimge [Nom du fichier][/r][/s][/h] ³
|
||||||
|
;³ /r restaure l'image /s sauve l'image /h aide ³
|
||||||
|
;³ ³
|
||||||
|
;³ Compilation : TASM boot /m4 /x ³
|
||||||
|
;³ TLINK boot /t /x ³
|
||||||
|
;ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
||||||
|
;³ Programmeur : Nico ³
|
||||||
|
;³ Con‡us le : 15/07/2001 ³
|
||||||
|
;³ Modifi‚ le : 15/07/2001 ³
|
||||||
|
;³ Site Web : http://www.multimania.com/cos2000 ³
|
||||||
|
;³ Copyright : libre distribution ³
|
||||||
|
;³ E-Mail : COS2000@multimania.com ³
|
||||||
|
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||||||
|
|
||||||
|
;==========================Directive d'assemblages============================
|
||||||
|
[BITS 16] ;Directive qui autorise la g‚n‚ration de code 16 bits
|
||||||
|
[ORG 0x100] ;Directive pour indiquer le d‚but du code
|
||||||
|
|
||||||
|
section .text
|
||||||
|
|
||||||
|
|
||||||
|
;=============================Debut du programmes=============================
|
||||||
|
|
||||||
|
start: ;Label du d‚but.
|
||||||
|
mov ah,0x09
|
||||||
|
mov dx,msg ;
|
||||||
|
int 0x21
|
||||||
|
mov ah,'r'
|
||||||
|
call Check
|
||||||
|
jnc restitute
|
||||||
|
mov ah,'s'
|
||||||
|
call Check
|
||||||
|
jnc save
|
||||||
|
help:
|
||||||
|
mov ah,0x09
|
||||||
|
mov dx,helpmsg
|
||||||
|
int 0x21
|
||||||
|
mov ax,0
|
||||||
|
int 0x16
|
||||||
|
ret
|
||||||
|
restitute:
|
||||||
|
mov ah,'n'
|
||||||
|
call Check
|
||||||
|
jnc nospl
|
||||||
|
mov ah,0x09
|
||||||
|
mov dx,msg2
|
||||||
|
int 21h
|
||||||
|
mov ax,0x00
|
||||||
|
int 16h
|
||||||
|
nospl:
|
||||||
|
mov ah,0x09
|
||||||
|
mov dx,res
|
||||||
|
int 0x21
|
||||||
|
call OpenCmdLine
|
||||||
|
jc error
|
||||||
|
mov si,buffer
|
||||||
|
mov di,si
|
||||||
|
xor cx,cx
|
||||||
|
restoring:
|
||||||
|
call Read18432
|
||||||
|
jc error
|
||||||
|
call WriteTrack ;Ecrit la piste CX sur les 2 tˆtes depuis ds:di
|
||||||
|
jc error
|
||||||
|
call ShowDot
|
||||||
|
inc cx
|
||||||
|
cmp cx,80
|
||||||
|
jb restoring
|
||||||
|
mov ah,0x09
|
||||||
|
mov dx,msgok
|
||||||
|
int 0x21
|
||||||
|
ret
|
||||||
|
save:
|
||||||
|
mov ah,'n'
|
||||||
|
call Check
|
||||||
|
jnc nospl2
|
||||||
|
mov ah,0x09
|
||||||
|
mov dx,msg2
|
||||||
|
int 0x21
|
||||||
|
mov ax,0
|
||||||
|
int 0x16
|
||||||
|
nospl2:
|
||||||
|
mov ah,0x09
|
||||||
|
mov dx,sav
|
||||||
|
int 0x21
|
||||||
|
call CreateCmdLine
|
||||||
|
jc error
|
||||||
|
mov si,buffer
|
||||||
|
mov di,si
|
||||||
|
xor cx,cx
|
||||||
|
saving:
|
||||||
|
call ReadTrack ;Lit la piste CX sur 2 tˆte en es:di
|
||||||
|
jc error
|
||||||
|
call Write18432
|
||||||
|
jc error
|
||||||
|
call ShowDot
|
||||||
|
inc cx
|
||||||
|
cmp cx,80
|
||||||
|
jb saving
|
||||||
|
mov ah,09
|
||||||
|
mov dx,msgok
|
||||||
|
int 0x21
|
||||||
|
ret
|
||||||
|
error:
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
call CloseCmdLine
|
||||||
|
mov ah,09
|
||||||
|
mov dx,errormsg
|
||||||
|
int 0x21
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Affiche un point
|
||||||
|
ShowDot:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
mov bx,cx
|
||||||
|
shr bx,4
|
||||||
|
mov al,[bx+dot]
|
||||||
|
mov ah,0x0E
|
||||||
|
mov bx,0x07
|
||||||
|
int 0x10
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Ecrit une piste CX 2 Tˆte, depuis le buffer DS:SI
|
||||||
|
ReadTrack:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push dx
|
||||||
|
push si
|
||||||
|
push es
|
||||||
|
push ds
|
||||||
|
pop es
|
||||||
|
xchg ch,cl
|
||||||
|
xor dx,dx
|
||||||
|
xor cl,cl
|
||||||
|
inc cl
|
||||||
|
mov bx,si
|
||||||
|
mov si,3
|
||||||
|
retry:
|
||||||
|
mov ax,0x0212
|
||||||
|
int 13h
|
||||||
|
jnc done
|
||||||
|
dec si
|
||||||
|
jnz retry
|
||||||
|
jmp dead
|
||||||
|
done:
|
||||||
|
add bx,9216
|
||||||
|
inc dh
|
||||||
|
cmp dh,1
|
||||||
|
je retry
|
||||||
|
dead:
|
||||||
|
pop es
|
||||||
|
pop si
|
||||||
|
pop dx
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Lit une piste CX sur deux tˆte dans le buffer ES:DI
|
||||||
|
WriteTrack:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push dx
|
||||||
|
push si
|
||||||
|
xchg ch,cl
|
||||||
|
xor dx,dx
|
||||||
|
xor cl,cl
|
||||||
|
inc cl
|
||||||
|
mov bx,di
|
||||||
|
mov si,3
|
||||||
|
retry2:
|
||||||
|
mov ax,0x0312
|
||||||
|
int 0x13
|
||||||
|
jnc done2
|
||||||
|
dec si
|
||||||
|
jnz retry2
|
||||||
|
done2:
|
||||||
|
add bx,9216
|
||||||
|
inc dh
|
||||||
|
cmp dh,1
|
||||||
|
je retry2
|
||||||
|
dead2:
|
||||||
|
pop si
|
||||||
|
pop dx
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Ecrit 18432 octets depuis DS:SI dans le fichier ouvert par OpenCmdline
|
||||||
|
Write18432:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push dx
|
||||||
|
mov ah,0x40
|
||||||
|
mov cx,18432
|
||||||
|
mov bx,[handle]
|
||||||
|
mov dx,si
|
||||||
|
int 0x21
|
||||||
|
pop dx
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Lit 18432 octets vers ES:DI depuis le fichier ouvert par OpenCmdline
|
||||||
|
Read18432:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push dx
|
||||||
|
mov ah,0x3F
|
||||||
|
mov cx,18432
|
||||||
|
mov bx,[handle]
|
||||||
|
mov dx,si
|
||||||
|
int 0x21
|
||||||
|
pop dx
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Ouvre la ligne de commande
|
||||||
|
OpenCmdLine:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push dx
|
||||||
|
mov bl,[0x80]
|
||||||
|
xor bh,bh
|
||||||
|
add bx,0x80
|
||||||
|
mov byte [bx],0
|
||||||
|
mov ax,0x3D00
|
||||||
|
mov dx,0x82
|
||||||
|
int 0x21
|
||||||
|
mov [handle],ax
|
||||||
|
pop dx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Cr‚e un fichier du nom de la ligne de commande
|
||||||
|
CreateCmdLine:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push dx
|
||||||
|
mov bl,[0x80]
|
||||||
|
xor bh,bh
|
||||||
|
add bx,0x80
|
||||||
|
mov byte [bx],0
|
||||||
|
mov ah,0x3C
|
||||||
|
xor cx,cx
|
||||||
|
mov dx,0x82
|
||||||
|
int 0x21
|
||||||
|
mov [handle],ax
|
||||||
|
pop dx
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Ferme le fichier pr‚c‚damment ouvert avec OpenCmdline
|
||||||
|
CloseCmdLine:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
mov bx,[handle]
|
||||||
|
mov ah,0x3E
|
||||||
|
int 0x21
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;Recherche le commutateur AH dans la ligne de commande si existant retourne FC=True.
|
||||||
|
Check:
|
||||||
|
push ax
|
||||||
|
push cx
|
||||||
|
push di
|
||||||
|
mov di,0x80
|
||||||
|
mov cl,[di]
|
||||||
|
cmp cl,0
|
||||||
|
je notfound2
|
||||||
|
xor ch,ch
|
||||||
|
mov al,'/'
|
||||||
|
search:
|
||||||
|
cmp cx,0
|
||||||
|
je notfound
|
||||||
|
repne scasb
|
||||||
|
cmp [di],ah
|
||||||
|
jnz search
|
||||||
|
jmp okfound
|
||||||
|
notfound:
|
||||||
|
sub ah,'a'-'A'
|
||||||
|
mov di,0x80
|
||||||
|
mov cl,[di]
|
||||||
|
search2:
|
||||||
|
cmp cx,0
|
||||||
|
je notfound2
|
||||||
|
repne scasb
|
||||||
|
cmp [di],ah
|
||||||
|
jnz search2
|
||||||
|
okfound:
|
||||||
|
mov word [di-2],0
|
||||||
|
clc
|
||||||
|
pop di
|
||||||
|
pop cx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
notfound2:
|
||||||
|
stc
|
||||||
|
pop di
|
||||||
|
pop cx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
res db "Restauration en cours",0x0A,0x0D,0x0A,0x0D,'$'
|
||||||
|
sav db "Sauvegarde en cours",0x0A,0x0D,0x0A,0x0D,'$'
|
||||||
|
dot db " °±²Û"
|
||||||
|
handle dw 0
|
||||||
|
msg db 0x0A,0x0D,"IFlop V1.0",0x0A,0x0D
|
||||||
|
db "Ecrit par Nico",0x0A,0x0D
|
||||||
|
db "http://www.multimania.com/cos2000",0Ah,0Dh
|
||||||
|
db "Copyright 2000",0Ah,0Dh,'$'
|
||||||
|
msg2 db "Ins‚rez une disquette de 1.44 Mo dans le lecteur et appuyez sur une touche...",0x0A,0x0D,'$'
|
||||||
|
errormsg db 0Ah,0Dh,"Une erreur est apparue lors de la copie !",0x0A,0x0D,'$'
|
||||||
|
msgok db 0Ah,0Dh,"La copie de l'image a ‚t‚ correctement r‚alis‚e",0x0A,0x0D,'$'
|
||||||
|
|
||||||
|
SectorsPerTrack dw 18 ;Nombre de secteur par pistes.
|
||||||
|
HeadsPerDrive dw 2 ;Nombre de t‚tes par disque.
|
||||||
|
|
||||||
|
helpmsg:
|
||||||
|
db "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"
|
||||||
|
db "³ COS 2000 ³"
|
||||||
|
db "³ http://www.multimania.com/cos2000 ³"
|
||||||
|
db "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´"
|
||||||
|
db "³ I F L O P ³"
|
||||||
|
db "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´"
|
||||||
|
db "³ Fonction : Programme permettant de r‚aliser des images disque dur ³"
|
||||||
|
db "³ d'une disquettes. ³"
|
||||||
|
db "³ ³"
|
||||||
|
db "³ Appel : Iflop [Nom du fichier][/r][/s][/h] ³"
|
||||||
|
db "³ /r restaure l'image /s sauve l'image /h aide ³"
|
||||||
|
db "³ ³"
|
||||||
|
db "³ Compilation : TASM boot /m4 /x ³"
|
||||||
|
db "³ TLINK boot /t /x ³"
|
||||||
|
db "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´"
|
||||||
|
db "³ Programmeur : Nico ³"
|
||||||
|
db "³ Con‡us le : 15/07/2001 ³"
|
||||||
|
db "³ Modifi‚ le : 15/07/2001 ³"
|
||||||
|
db "³ Site Web : http://www.multimania.com/cos2000 ³"
|
||||||
|
db "³ Copyright : libre distribution ³"
|
||||||
|
db "³ E-Mail : COS2000@multimania.com ³"
|
||||||
|
db "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ$"
|
||||||
|
|
||||||
|
section .bss
|
||||||
|
|
||||||
|
[org 0x5000]
|
||||||
|
|
||||||
|
buffer resb 512 ;Allocation de 512 octets pour contenir le secteur lu.
|
|
@ -0,0 +1,16 @@
|
||||||
|
all: makall
|
||||||
|
|
||||||
|
makall: iflop.com
|
||||||
|
|
||||||
|
|
||||||
|
iflop.com:
|
||||||
|
nasm -f bin -o iflop.com iflop.asm
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o
|
||||||
|
rm -f *.bin
|
||||||
|
rm -f *.sys
|
||||||
|
rm -f *.com
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
all: makall
|
||||||
|
|
||||||
|
makall:
|
||||||
|
sync
|
||||||
|
|
||||||
|
clean:
|
||||||
|
(cd iflop; make clean)
|
||||||
|
(cd mbrol; make clean)
|
||||||
|
|
||||||
|
iflop/iflop.com:
|
||||||
|
(cd iflop; make)
|
||||||
|
|
||||||
|
mbrol/mbrol.com:
|
||||||
|
(cd mbrol; make)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
struc echs
|
||||||
|
Sizes resb 1
|
||||||
|
Reserve resb 1
|
||||||
|
NumSectors resw 1
|
||||||
|
Adressoff resw 1
|
||||||
|
Adressseg resw 1
|
||||||
|
SectorLow resw 1
|
||||||
|
SectorHigh resw 1
|
||||||
|
Dummy resq 1
|
||||||
|
endstuc
|
|
@ -0,0 +1,897 @@
|
||||||
|
[BITS 16]
|
||||||
|
[ORG 0x0100]
|
||||||
|
|
||||||
|
section .text
|
||||||
|
|
||||||
|
start:
|
||||||
|
push eax
|
||||||
|
push ebx
|
||||||
|
push edi
|
||||||
|
push ebp
|
||||||
|
mov di, disk
|
||||||
|
call detectdisk
|
||||||
|
call cls
|
||||||
|
mov si,di
|
||||||
|
mov di, thepart
|
||||||
|
call getdriveinfos
|
||||||
|
mov [numbers],cx
|
||||||
|
mov si,di
|
||||||
|
call showdriveinfos
|
||||||
|
mov al,3
|
||||||
|
call selection
|
||||||
|
mov word [sel],0
|
||||||
|
waitafter:
|
||||||
|
call waitkey
|
||||||
|
cmp ah,0x50
|
||||||
|
jne tre1
|
||||||
|
mov ax,[sel]
|
||||||
|
inc al
|
||||||
|
cmp ax,[numbers]
|
||||||
|
jz waitafter
|
||||||
|
mov [sel],ax
|
||||||
|
add al,3
|
||||||
|
call selection
|
||||||
|
jmp waitafter
|
||||||
|
tre1:
|
||||||
|
cmp ah,0x48
|
||||||
|
jne tre2
|
||||||
|
mov ax,[sel]
|
||||||
|
cmp ax,0
|
||||||
|
jz waitafter
|
||||||
|
dec al
|
||||||
|
mov [sel],ax
|
||||||
|
add al,3
|
||||||
|
call selection
|
||||||
|
jmp waitafter
|
||||||
|
tre2:
|
||||||
|
cmp al,0x0D
|
||||||
|
jne waitafter
|
||||||
|
mov bx,[sel]
|
||||||
|
shl bx,6
|
||||||
|
add bx,thepart
|
||||||
|
mov si,mmp
|
||||||
|
call showstr
|
||||||
|
mov si,bx
|
||||||
|
add si,28
|
||||||
|
call showstr
|
||||||
|
mov bp,[bx+26]
|
||||||
|
call initdisk
|
||||||
|
xor ax,ax
|
||||||
|
mov es,ax
|
||||||
|
mov ds,ax
|
||||||
|
mov di,0x0600
|
||||||
|
mov ecx,[cs:bx+16]
|
||||||
|
call readsector
|
||||||
|
mov di,0x7C00
|
||||||
|
mov ecx,[cs:bx+22]
|
||||||
|
call readsector
|
||||||
|
mov dx,bp
|
||||||
|
mov si,[cs:bx+20]
|
||||||
|
add si,0x0600
|
||||||
|
pop ebp
|
||||||
|
pop edi
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
jmp 0x0000:0x7C00
|
||||||
|
|
||||||
|
;=============================================================================
|
||||||
|
|
||||||
|
; DONNEES FIXES
|
||||||
|
|
||||||
|
;=============================================================================
|
||||||
|
mmp db "Chargement du disque ",0
|
||||||
|
msg db "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"
|
||||||
|
db "³ Letter:Name ³ Type ³ Boot ³ Statut ³ Size MByte ³ StartSector ³"
|
||||||
|
db "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´",0
|
||||||
|
tab db "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÙ",0
|
||||||
|
sep db " ³ ",0
|
||||||
|
|
||||||
|
partkind db 001h,"FAT12 ",0
|
||||||
|
db 004h,"FAT16 ",0
|
||||||
|
db 005h,"Extended ",0
|
||||||
|
db 006h,"FAT16B ",0
|
||||||
|
db 007h,"IFS ",0
|
||||||
|
db 00Bh,"FAT32 ",0
|
||||||
|
db 00Ch,"FAT32X ",0
|
||||||
|
db 00Eh,"FAT16X ",0
|
||||||
|
db 00Fh,"ExtendedX ",0
|
||||||
|
db 081h,"Linux 1.4b",0
|
||||||
|
db 082h,"Linux SWAP",0
|
||||||
|
db 083h,"Linux EXT2",0
|
||||||
|
db 011h,"FAT12 Hid ",0
|
||||||
|
db 014h,"FAT16 Hid",0
|
||||||
|
db 016h,"FAT16B Hid",0
|
||||||
|
db 017h,"IFS Hid ",0
|
||||||
|
db 01Bh,"FAT32 Hid ",0
|
||||||
|
db 01Ch,"FAT32X Hid",0
|
||||||
|
db 01Eh,"FAT16X Hid",0
|
||||||
|
db 0FFh,"Unknowed ",0
|
||||||
|
|
||||||
|
noname db "Unknowed ","Unkowned ",0
|
||||||
|
unknowed db "Movable ",0
|
||||||
|
primary db "Primary ",0
|
||||||
|
secondary db "Secondary",0
|
||||||
|
yes db "Yes ",0
|
||||||
|
no db "No ",0
|
||||||
|
mo db " MB",0
|
||||||
|
|
||||||
|
;=============================================================================
|
||||||
|
|
||||||
|
; ROUTINES PARTICULIERES
|
||||||
|
|
||||||
|
;=============================================================================
|
||||||
|
;Affiche des infos sur le volume
|
||||||
|
showdriveinfos:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push edx
|
||||||
|
push si
|
||||||
|
mov si, msg
|
||||||
|
call showstr
|
||||||
|
mov bx,thepart
|
||||||
|
mov cx,[numbers]
|
||||||
|
showall:
|
||||||
|
mov al,'³'
|
||||||
|
call showchar
|
||||||
|
mov al,' '
|
||||||
|
call showchar
|
||||||
|
mov al,[bx+51]
|
||||||
|
call showchar
|
||||||
|
mov al,':'
|
||||||
|
call showchar
|
||||||
|
mov si,bx
|
||||||
|
add si,28
|
||||||
|
call showstr
|
||||||
|
mov si, sep
|
||||||
|
call showstr
|
||||||
|
mov al,[bx+4]
|
||||||
|
cmp al,0xFF
|
||||||
|
je useboot
|
||||||
|
mov si, partkind+1
|
||||||
|
search:
|
||||||
|
cmp byte[si-1],0x0FF
|
||||||
|
je notboot
|
||||||
|
cmp [si-1],al
|
||||||
|
je notboot
|
||||||
|
add si,12
|
||||||
|
jmp search
|
||||||
|
useboot:
|
||||||
|
mov si,bx
|
||||||
|
add si,40
|
||||||
|
notboot:
|
||||||
|
call showstr
|
||||||
|
mov si, sep
|
||||||
|
call showstr
|
||||||
|
mov si, yes
|
||||||
|
cmp byte [bx],0x80
|
||||||
|
je okboot
|
||||||
|
mov si, no
|
||||||
|
okboot:
|
||||||
|
call showstr
|
||||||
|
mov si, sep
|
||||||
|
call showstr
|
||||||
|
mov si, primary
|
||||||
|
cmp dword [bx+16],0
|
||||||
|
je okprimary
|
||||||
|
mov si, secondary
|
||||||
|
okprimary:
|
||||||
|
cmp byte [bx+4],0x0FF
|
||||||
|
jne wasno
|
||||||
|
mov si, unknowed
|
||||||
|
wasno:
|
||||||
|
call showstr
|
||||||
|
mov si, sep
|
||||||
|
call showstr
|
||||||
|
mov edx,[bx+12]
|
||||||
|
shr edx,11
|
||||||
|
call showint
|
||||||
|
mov si, mo
|
||||||
|
call showstr
|
||||||
|
mov si, sep
|
||||||
|
call showstr
|
||||||
|
mov edx,[bx+22]
|
||||||
|
call showint
|
||||||
|
mov al,' '
|
||||||
|
call showchar
|
||||||
|
mov al,'³'
|
||||||
|
call showchar
|
||||||
|
add bx,64
|
||||||
|
dec cx
|
||||||
|
jnz near showall
|
||||||
|
mov si, tab
|
||||||
|
call showstr
|
||||||
|
pop si
|
||||||
|
pop edx
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;met en surlign‚e la ligne al et seulement al
|
||||||
|
selection:
|
||||||
|
push cx
|
||||||
|
mov ch,0x70
|
||||||
|
call selectline
|
||||||
|
xchg al,[cs:old]
|
||||||
|
mov ch,0x07
|
||||||
|
call selectline
|
||||||
|
pop cx
|
||||||
|
ret
|
||||||
|
|
||||||
|
old db 20
|
||||||
|
|
||||||
|
;selectionne la ligne al de couleur ch
|
||||||
|
selectline:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push ds
|
||||||
|
mov bh,160
|
||||||
|
mul bh
|
||||||
|
mov bx,ax
|
||||||
|
mov ax,0xB800
|
||||||
|
mov ds,ax
|
||||||
|
inc bx
|
||||||
|
mov cl,80
|
||||||
|
select:
|
||||||
|
mov [bx],ch
|
||||||
|
add bx,2
|
||||||
|
dec cl
|
||||||
|
jnz select
|
||||||
|
pop ds
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=============================================================================
|
||||||
|
|
||||||
|
; ROUTINES UNIVERSELLES INSPIREE DE COS2000
|
||||||
|
|
||||||
|
;=============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
;=========GETDRIVEINFOS==============
|
||||||
|
;Envoie en es:di les lecteurs logiques sur les volumes point‚ par ds:si
|
||||||
|
;-> BP, ES:DI
|
||||||
|
;<- CX leur nombre
|
||||||
|
;====================================
|
||||||
|
getdriveinfos:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push dx
|
||||||
|
push si
|
||||||
|
push di
|
||||||
|
push bp
|
||||||
|
push di
|
||||||
|
xor bx,bx
|
||||||
|
show:
|
||||||
|
xor dh,dh
|
||||||
|
mov dl,[si]
|
||||||
|
inc si
|
||||||
|
cmp dl,0xFF
|
||||||
|
je endofshow
|
||||||
|
mov bp,dx
|
||||||
|
call initdisk
|
||||||
|
call IsMbr
|
||||||
|
je okmbr
|
||||||
|
call getvolume
|
||||||
|
inc bx
|
||||||
|
add di,64
|
||||||
|
jmp show
|
||||||
|
okmbr:
|
||||||
|
call getpartitions
|
||||||
|
mov ax,cx
|
||||||
|
shl ax,6
|
||||||
|
add di,ax
|
||||||
|
add bx,cx
|
||||||
|
jmp show
|
||||||
|
endofshow:
|
||||||
|
pop si
|
||||||
|
mov al,'C'
|
||||||
|
mov cx,bx
|
||||||
|
push cx
|
||||||
|
push si
|
||||||
|
checkp:
|
||||||
|
cmp byte [si+4],5
|
||||||
|
je notprim
|
||||||
|
cmp byte [si+4],0x0F
|
||||||
|
je notprim
|
||||||
|
cmp byte [si+16],0
|
||||||
|
jnz notprim
|
||||||
|
cmp byte [si+26],0x80
|
||||||
|
jb notprim
|
||||||
|
mov [si+51],al
|
||||||
|
inc al
|
||||||
|
notprim:
|
||||||
|
add si,64
|
||||||
|
dec cx
|
||||||
|
jnz checkp
|
||||||
|
pop si
|
||||||
|
pop cx
|
||||||
|
push cx
|
||||||
|
push si
|
||||||
|
checkl:
|
||||||
|
cmp byte [si+4],5
|
||||||
|
je notext
|
||||||
|
cmp byte [si+4],0x0F
|
||||||
|
je notext
|
||||||
|
cmp byte [si+16],0x00
|
||||||
|
jz notext
|
||||||
|
cmp byte [si+26],0x80
|
||||||
|
jb notext
|
||||||
|
mov [si+51],al
|
||||||
|
inc al
|
||||||
|
notext:
|
||||||
|
add si,64
|
||||||
|
dec cx
|
||||||
|
jnz checkl
|
||||||
|
pop si
|
||||||
|
pop cx
|
||||||
|
mov al,'A'
|
||||||
|
push cx
|
||||||
|
push si
|
||||||
|
checkn:
|
||||||
|
cmp byte [si+26],0x80
|
||||||
|
jae notlec
|
||||||
|
mov [si+51],al
|
||||||
|
inc al
|
||||||
|
notlec:
|
||||||
|
add si,64
|
||||||
|
dec cx
|
||||||
|
jnz checkn
|
||||||
|
pop si
|
||||||
|
pop cx
|
||||||
|
mov al,'*'
|
||||||
|
push cx
|
||||||
|
push si
|
||||||
|
checko:
|
||||||
|
cmp byte [si+4],5
|
||||||
|
je ext2
|
||||||
|
cmp byte [si+4],0x0F
|
||||||
|
jne notext2
|
||||||
|
ext2:
|
||||||
|
mov [si+51],al
|
||||||
|
notext2:
|
||||||
|
add si,64
|
||||||
|
dec cx
|
||||||
|
jnz checko
|
||||||
|
pop si
|
||||||
|
pop cx
|
||||||
|
pop bp
|
||||||
|
pop di
|
||||||
|
pop si
|
||||||
|
pop dx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=============GETVOLUME==============
|
||||||
|
;Envoie en es:di les infos disque EBP
|
||||||
|
;-> BP, ES:DI
|
||||||
|
;<-
|
||||||
|
;====================================
|
||||||
|
getvolume:
|
||||||
|
push ax
|
||||||
|
push ecx
|
||||||
|
push edx
|
||||||
|
push di
|
||||||
|
push di
|
||||||
|
mov cx,64
|
||||||
|
mov al,0
|
||||||
|
cld
|
||||||
|
rep stosb
|
||||||
|
pop di
|
||||||
|
mov byte [es:di+4],0xFF
|
||||||
|
mov ecx,0
|
||||||
|
mov [di+26],bp
|
||||||
|
push di
|
||||||
|
add di,28
|
||||||
|
call getbootinfos
|
||||||
|
pop di
|
||||||
|
mov [di+12],edx
|
||||||
|
pop di
|
||||||
|
pop edx
|
||||||
|
pop ecx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;==========GETBOOTINFOS==============
|
||||||
|
;Envoie en es:di le nom du volume & le FS d'adresse LBA ECX sur disque EBP
|
||||||
|
;-> BP, ES:DI, ECX
|
||||||
|
;<-
|
||||||
|
;====================================
|
||||||
|
getbootinfos:
|
||||||
|
push ax
|
||||||
|
push cx
|
||||||
|
push si
|
||||||
|
push di
|
||||||
|
push di
|
||||||
|
push es
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
mov di,buffer
|
||||||
|
mov si,di
|
||||||
|
call readsector
|
||||||
|
pop es
|
||||||
|
pop di
|
||||||
|
cmp byte [si+0x13],0
|
||||||
|
je more32
|
||||||
|
xor edx,edx
|
||||||
|
mov dx,[si+0x13]
|
||||||
|
jmp more16
|
||||||
|
more32:
|
||||||
|
mov edx,[si+0x20]
|
||||||
|
more16:
|
||||||
|
cmp byte [si+0x42],0x29
|
||||||
|
je fat32
|
||||||
|
cmp byte [si+0x26],0x29
|
||||||
|
je fat16
|
||||||
|
unk:
|
||||||
|
mov si,noname
|
||||||
|
jmp rel
|
||||||
|
fat32:
|
||||||
|
add si,0x47
|
||||||
|
jmp rel
|
||||||
|
fat16:
|
||||||
|
add si,0x2B
|
||||||
|
rel:
|
||||||
|
mov cx,11
|
||||||
|
cld
|
||||||
|
rep movsb
|
||||||
|
mov al,0
|
||||||
|
stosb
|
||||||
|
mov cx,8
|
||||||
|
rep movsb
|
||||||
|
mov ax,' '
|
||||||
|
stosw
|
||||||
|
mov al,0
|
||||||
|
stosb
|
||||||
|
pop di
|
||||||
|
pop si
|
||||||
|
pop cx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;==========GETPARTITION==============
|
||||||
|
;Envoie en es:di la liste des partitions du disque BP
|
||||||
|
;-> BP, ES:DI
|
||||||
|
;<- renvoie leur nombre en CX
|
||||||
|
;====================================
|
||||||
|
getpartitions:
|
||||||
|
push eax
|
||||||
|
push ebx
|
||||||
|
push edx
|
||||||
|
push si
|
||||||
|
push di
|
||||||
|
mov ecx,0
|
||||||
|
mov word [wheres],0
|
||||||
|
mov [theprimary],ecx
|
||||||
|
againpart:
|
||||||
|
xor eax,eax
|
||||||
|
mov ebx,ecx
|
||||||
|
push di
|
||||||
|
mov di,partition
|
||||||
|
CALL readsector
|
||||||
|
mov si, di
|
||||||
|
pop di
|
||||||
|
add si,0x01BE
|
||||||
|
mov cl,4
|
||||||
|
showevery:
|
||||||
|
cmp dword [si+NumSector],0x00000000
|
||||||
|
je nothings
|
||||||
|
mov edx,[si+StartSector]
|
||||||
|
cmp byte [si+Kind],0x05
|
||||||
|
je is
|
||||||
|
cmp byte [si+Kind],0x0F
|
||||||
|
jne isnot
|
||||||
|
is:
|
||||||
|
mov eax,[theprimary]
|
||||||
|
add eax,edx
|
||||||
|
cmp dword [theprimary],0
|
||||||
|
jne nothings
|
||||||
|
isnot:
|
||||||
|
push ecx
|
||||||
|
push di
|
||||||
|
push si
|
||||||
|
mov cx,[wheres]
|
||||||
|
shl cx,6
|
||||||
|
add di,cx
|
||||||
|
mov ecx,16/4
|
||||||
|
rep movsd
|
||||||
|
pop si
|
||||||
|
mov [di],ebx
|
||||||
|
mov [di+4],si
|
||||||
|
sub word [di+4],partition
|
||||||
|
mov [di+6],ebx
|
||||||
|
add [di+6],edx
|
||||||
|
mov ecx,[di+6]
|
||||||
|
mov [di+10],bp
|
||||||
|
add di,12
|
||||||
|
push edx
|
||||||
|
call getbootinfos
|
||||||
|
pop edx
|
||||||
|
pop di
|
||||||
|
pop ecx
|
||||||
|
inc word [wheres]
|
||||||
|
nothings:
|
||||||
|
add si,16
|
||||||
|
dec cl
|
||||||
|
jnz showevery
|
||||||
|
mov ecx,eax
|
||||||
|
cmp dword [theprimary],0x00000000
|
||||||
|
jne noth
|
||||||
|
mov [theprimary],eax
|
||||||
|
noth:
|
||||||
|
cmp ecx,0
|
||||||
|
jnz near againpart
|
||||||
|
mov cx,[wheres]
|
||||||
|
pop di
|
||||||
|
pop si
|
||||||
|
pop edx
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;==============ISMBR=================
|
||||||
|
;Zero si Mbr sur le premier secteur du support BP
|
||||||
|
;-> BP
|
||||||
|
;<-
|
||||||
|
;====================================
|
||||||
|
IsMbr:
|
||||||
|
push ax
|
||||||
|
push ecx
|
||||||
|
push di
|
||||||
|
push es
|
||||||
|
mov ecx,0
|
||||||
|
mov di,buffer
|
||||||
|
push cs
|
||||||
|
pop es
|
||||||
|
call readsector
|
||||||
|
add di,0x01BE
|
||||||
|
mov cl,4
|
||||||
|
isgood:
|
||||||
|
mov al,[cs:di]
|
||||||
|
and al,0x7F
|
||||||
|
cmp al,0
|
||||||
|
jne noMbr
|
||||||
|
add di,16
|
||||||
|
dec cl
|
||||||
|
jne isgood
|
||||||
|
cmp word [cs:di],0xAA55
|
||||||
|
noMbr:
|
||||||
|
pop es
|
||||||
|
pop di
|
||||||
|
pop ecx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=============DETECTDISK=============
|
||||||
|
;Renvoie en ES:DI les disques d‚tect‚s fini par 0FFh
|
||||||
|
;-> ES:DI
|
||||||
|
;<-
|
||||||
|
;====================================
|
||||||
|
detectdisk:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push dx
|
||||||
|
push si
|
||||||
|
push di
|
||||||
|
mov si,PossibleDisks
|
||||||
|
DetectAllDisk:
|
||||||
|
mov dl,[cs:si]
|
||||||
|
inc si
|
||||||
|
cmp dl,0xFF
|
||||||
|
je EndOfDetection
|
||||||
|
mov cl,4
|
||||||
|
retry:
|
||||||
|
push cx
|
||||||
|
mov ax,0x0201
|
||||||
|
mov cx,0x0101
|
||||||
|
mov dh,0x00
|
||||||
|
mov bx,buffer
|
||||||
|
int 0x13
|
||||||
|
pop cx
|
||||||
|
jnc isdetected
|
||||||
|
dec cl
|
||||||
|
jnz retry
|
||||||
|
jmp DetectAllDisk
|
||||||
|
isdetected:
|
||||||
|
mov [es:di],dl
|
||||||
|
inc di
|
||||||
|
jmp DetectAllDisk
|
||||||
|
EndOfDetection:
|
||||||
|
mov byte [di],0xFF
|
||||||
|
pop di
|
||||||
|
pop si
|
||||||
|
pop dx
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
PossibleDisks db 0x00,0x01,0x02,0x03,0x04,0x05,0x80,0x81,0x82,0x83,0x84,0x85,0xFF
|
||||||
|
|
||||||
|
;=============INITDISK===============
|
||||||
|
;Initialise le p‚riph‚rique BP pour une utilisation ult‚rieure
|
||||||
|
;-> BP
|
||||||
|
;<-
|
||||||
|
;====================================
|
||||||
|
initdisk:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push dx
|
||||||
|
push di
|
||||||
|
push es
|
||||||
|
mov dx,bp
|
||||||
|
mov ah,8
|
||||||
|
int 0x13
|
||||||
|
and cx,0x3F
|
||||||
|
mov [cs:sectorspertrack],cx
|
||||||
|
mov cl,dh
|
||||||
|
inc cl
|
||||||
|
mov [cs:headsperdrive],cx
|
||||||
|
pop es
|
||||||
|
pop di
|
||||||
|
pop dx
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=============READSECTOR===============
|
||||||
|
;Lit le secteur ECX du disque BP et le met en es:di
|
||||||
|
;->
|
||||||
|
;<-
|
||||||
|
;======================================
|
||||||
|
readsector:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push ecx
|
||||||
|
push dx
|
||||||
|
push si
|
||||||
|
mov ax,bp
|
||||||
|
mov [cs:temp],al
|
||||||
|
mov ax, cx
|
||||||
|
ror ecx, 16
|
||||||
|
mov dx, cx
|
||||||
|
rol ecx,16
|
||||||
|
cmp ecx,4128705
|
||||||
|
ja extended
|
||||||
|
div word [cs:sectorspertrack]
|
||||||
|
inc dl
|
||||||
|
mov bl, dl
|
||||||
|
xor dx,dx
|
||||||
|
div word [cs:headsperdrive]
|
||||||
|
mov dh, [cs:temp]
|
||||||
|
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 0x13
|
||||||
|
jnc Done
|
||||||
|
dec si
|
||||||
|
jnz TryAgain
|
||||||
|
Done:
|
||||||
|
pop si
|
||||||
|
pop dx
|
||||||
|
pop ecx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
extended:
|
||||||
|
push di
|
||||||
|
push ds
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
mov si,block
|
||||||
|
mov byte [si+Sizes],0x10
|
||||||
|
mov byte [si+Reserve],0x01
|
||||||
|
mov word [si+NumSectors],0x0001
|
||||||
|
mov [si+Adressseg],es
|
||||||
|
mov [si+Adressoff],di
|
||||||
|
mov [si+SectorLow],ax
|
||||||
|
mov [si+SectorHigh],dx
|
||||||
|
mov di,4
|
||||||
|
mov dl,[temp]
|
||||||
|
TryAgainX:
|
||||||
|
mov ah, 0x42
|
||||||
|
int 0x13
|
||||||
|
jnc DoneX
|
||||||
|
dec di
|
||||||
|
jnz TryAgainX
|
||||||
|
DoneX:
|
||||||
|
pop ds
|
||||||
|
pop di
|
||||||
|
pop si
|
||||||
|
pop dx
|
||||||
|
pop ecx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
headsperdrive dw 16
|
||||||
|
sectorspertrack dw 38
|
||||||
|
block times 24 db 0
|
||||||
|
temp db 0
|
||||||
|
|
||||||
|
;============CLS==============
|
||||||
|
;Efface l'‚cran
|
||||||
|
;->
|
||||||
|
;<-
|
||||||
|
;=============================
|
||||||
|
cls:
|
||||||
|
push ax
|
||||||
|
mov ax,0x0003
|
||||||
|
int 0x10
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;==========SHOWSTR============
|
||||||
|
;Affiche une chaine de caractŠre point‚ par SI
|
||||||
|
;-> SI pointe une chaine
|
||||||
|
;<-
|
||||||
|
;=============================
|
||||||
|
showstr:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push si
|
||||||
|
cld
|
||||||
|
again:
|
||||||
|
lodsb
|
||||||
|
or al,al
|
||||||
|
jz fin
|
||||||
|
call showchar
|
||||||
|
jmp again
|
||||||
|
fin:
|
||||||
|
pop si
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;==========SHOWPASSTR============
|
||||||
|
;Affiche une chaine de caractŠre point‚ par SI
|
||||||
|
;-> SI pointe une chaine
|
||||||
|
;<-
|
||||||
|
;=============================
|
||||||
|
showpasstr:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push si
|
||||||
|
mov cl,[si]
|
||||||
|
inc si
|
||||||
|
cld
|
||||||
|
again2:
|
||||||
|
lodsb
|
||||||
|
call showchar
|
||||||
|
dec cl
|
||||||
|
jnz again2
|
||||||
|
fin2:
|
||||||
|
pop si
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;==========WAITKEY=============
|
||||||
|
;Attend l'appuie d'une toouche et
|
||||||
|
;renvoie en AL la touche appuyer
|
||||||
|
;->
|
||||||
|
;<- AL
|
||||||
|
;==============================
|
||||||
|
waitkey:
|
||||||
|
mov ax,0
|
||||||
|
int 0x16
|
||||||
|
ret
|
||||||
|
|
||||||
|
;==========SHOWCHAR============
|
||||||
|
;Affiche un caractŠre point‚ dans AL
|
||||||
|
;-> AL
|
||||||
|
;<-
|
||||||
|
;==============================
|
||||||
|
showchar:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
mov ah,0x0E
|
||||||
|
mov bx,0x07
|
||||||
|
int 0x10
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;==========SHOWINT============
|
||||||
|
;Affiche un entier EDX apr‚s le curseur
|
||||||
|
;-> EDX un entier
|
||||||
|
;<-
|
||||||
|
;=============================
|
||||||
|
showint:
|
||||||
|
push eax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push edx
|
||||||
|
push esi
|
||||||
|
push di
|
||||||
|
push ds
|
||||||
|
push es
|
||||||
|
|
||||||
|
push cs
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
pop es
|
||||||
|
mov cx,10
|
||||||
|
mov di, showbuffer
|
||||||
|
mov al,' '
|
||||||
|
cld
|
||||||
|
rep stosb
|
||||||
|
xor cx,cx
|
||||||
|
mov eax, edx
|
||||||
|
mov esi, 10
|
||||||
|
mov bx,di
|
||||||
|
mov byte [cs:di+1],0
|
||||||
|
decint:
|
||||||
|
xor edx,edx
|
||||||
|
div esi
|
||||||
|
add dl,'0'
|
||||||
|
inc cx
|
||||||
|
mov [cs:bx],dl
|
||||||
|
dec bx
|
||||||
|
cmp ax, 0
|
||||||
|
jne decint
|
||||||
|
showinteger:
|
||||||
|
mov si, showbuffer
|
||||||
|
call showstr
|
||||||
|
pop es
|
||||||
|
pop ds
|
||||||
|
pop di
|
||||||
|
pop esi
|
||||||
|
pop edx
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=============================================================================
|
||||||
|
|
||||||
|
; VARIABLES INITIALISEE
|
||||||
|
|
||||||
|
;=============================================================================
|
||||||
|
|
||||||
|
sel dw 0
|
||||||
|
wheres dw 0
|
||||||
|
numbers dw 0
|
||||||
|
|
||||||
|
;=============================================================================
|
||||||
|
|
||||||
|
; VARIABLES NON INITIALISEE
|
||||||
|
|
||||||
|
;=============================================================================
|
||||||
|
|
||||||
|
theprimary equ $
|
||||||
|
showbuffer equ $+1
|
||||||
|
disk equ $+1+12
|
||||||
|
partition equ $+1+12+26
|
||||||
|
buffer equ $+1+12+26+512
|
||||||
|
thepart equ $+1+12+26+512+512
|
||||||
|
|
||||||
|
section .bss
|
||||||
|
|
||||||
|
%include "partition.h"
|
||||||
|
%include "echs.h"
|
||||||
|
|
||||||
|
;theprimary resd 1
|
||||||
|
;showbuffer resb 12
|
||||||
|
;disk resb 26
|
||||||
|
;partition resb 512
|
||||||
|
;buffer resb 512
|
||||||
|
;thepart resb 10000
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
all: makall
|
||||||
|
|
||||||
|
makall: mbrol.com
|
||||||
|
|
||||||
|
mbrol.com:
|
||||||
|
nasm -f bin -o mbr.bin mbr.asm
|
||||||
|
nasm -f bin -o loader.bin loader.asm
|
||||||
|
sync
|
||||||
|
nasm -f bin -o mbrol.com mbrol.asm
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o
|
||||||
|
rm -f *.bin
|
||||||
|
rm -f *.sys
|
||||||
|
rm -f *.com
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,214 @@
|
||||||
|
[BITS 16]
|
||||||
|
[ORG 0x7C00]
|
||||||
|
|
||||||
|
start:
|
||||||
|
jmp short falsereal ;vers debut programme
|
||||||
|
db "MBROL" ;Signature MBROL
|
||||||
|
falsereal:
|
||||||
|
cli ;inhibation interruptions
|
||||||
|
xor ax,ax
|
||||||
|
mov ss,ax ;Reloge pile en 0000h:9000h
|
||||||
|
mov sp,0x9000
|
||||||
|
push ax
|
||||||
|
pop ds ;DS=0000h
|
||||||
|
add ah,0x10
|
||||||
|
push ax
|
||||||
|
pop es ;ES=1000h
|
||||||
|
sti ;Reactivation des interruptions
|
||||||
|
cld
|
||||||
|
mov [sitemp],si ;sauvegarde si (adresse partition active)
|
||||||
|
mov di,0x7C00
|
||||||
|
mov si,di
|
||||||
|
mov cx,512/4
|
||||||
|
rep movsd ;On reloge le programme en 1000h:7C00h
|
||||||
|
push es
|
||||||
|
pop ds ;DS=1000h
|
||||||
|
jmp 0x1000:RealStart
|
||||||
|
|
||||||
|
RealStart:
|
||||||
|
xor dh,dh
|
||||||
|
mov bp,dx ;R‚cupŠre en BP le nølecteur de d‚marrage
|
||||||
|
call initdisk ;Initialisation du p‚riph‚rique
|
||||||
|
;call cls ;Efface l'‚cran
|
||||||
|
mov si, msg
|
||||||
|
call showstr ;Affiche le splatch de boot
|
||||||
|
call getkey ;R‚cupŠre la touche press‚ par l'utilisateur
|
||||||
|
cmp al,' ' ;touche = espace
|
||||||
|
jne normal ;si autre touche on démarre normalement
|
||||||
|
mov si, msgmbrol
|
||||||
|
call showstr ;Message de chargement de Cos loader
|
||||||
|
xor ecx,ecx
|
||||||
|
inc ecx
|
||||||
|
mov di,0x0100
|
||||||
|
readload:
|
||||||
|
inc ecx
|
||||||
|
call readsector ;Charge le secteur LBA ecx en es:di
|
||||||
|
add di,512
|
||||||
|
cmp ecx,7
|
||||||
|
jb readload ;Charge les secteurs LBA 2 … 6 en 1000h:0100h
|
||||||
|
|
||||||
|
jmp 0x1000:0x0100 ;Execute Cos loader
|
||||||
|
;saut FAR vers 1000h:0100h
|
||||||
|
|
||||||
|
normal:
|
||||||
|
mov si,msgnorm
|
||||||
|
call showstr ;Affiche le d‚marrage normal
|
||||||
|
mov ecx,1
|
||||||
|
xor ax,ax
|
||||||
|
mov es,ax
|
||||||
|
mov ds,ax
|
||||||
|
mov di,0x7C00 ;Charge le secteur LBA 1 en 0000h:7C00h
|
||||||
|
call readsector ;qui est le MBR d'origine sauvegard‚ par MBROL
|
||||||
|
mov dx,bp ;Renvoie dans DL le lecteur de d‚marrage
|
||||||
|
mov si,[sitemp] ;restaure si (adresse de la partition)
|
||||||
|
jmp 0x0000:0x7C00 ;Une op‚ration normalement r‚alis‚e par le BIOS
|
||||||
|
;Saut vers le MBR en 0000h:7C00h
|
||||||
|
|
||||||
|
temp db 0
|
||||||
|
sitemp dw 0
|
||||||
|
HeadsPerDrive dw 16
|
||||||
|
SectorsPerTrack dw 38
|
||||||
|
msg db "Cos2000 MBROL V1.0",0x0A,0x0D,"Press [SPACE] to execute Cos Loader",0x0A,0x0D,0
|
||||||
|
point db '.',0
|
||||||
|
msgmbrol db "Cos Loader is loading",0
|
||||||
|
msgnorm db "Booting...",0
|
||||||
|
|
||||||
|
;=============INITDISK===============
|
||||||
|
;Initialise le p‚riph‚rique BP pour une utilisation ult‚rieure
|
||||||
|
;-> BP
|
||||||
|
;<-
|
||||||
|
;====================================
|
||||||
|
initdisk:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push cx
|
||||||
|
push dx
|
||||||
|
push di
|
||||||
|
push es
|
||||||
|
mov dx,bp
|
||||||
|
mov ah,8
|
||||||
|
int 0x13
|
||||||
|
and cx,111111b
|
||||||
|
mov [cs:SectorsPerTrack],cx
|
||||||
|
mov cl,dh
|
||||||
|
inc cl
|
||||||
|
mov [cs:HeadsPerDrive],cx
|
||||||
|
pop es
|
||||||
|
pop di
|
||||||
|
pop dx
|
||||||
|
pop cx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;=============READSECTOR (Fonction 01H)===============
|
||||||
|
;Lit le secteur ECX du disque BP et le met en es:di
|
||||||
|
;-> AH=1
|
||||||
|
;<- Flag Carry si erreur
|
||||||
|
;=====================================================
|
||||||
|
readsector:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push ecx
|
||||||
|
push dx
|
||||||
|
push si
|
||||||
|
mov ax,bp
|
||||||
|
mov [cs:temp],al
|
||||||
|
mov ax, cx
|
||||||
|
ror ecx, 16
|
||||||
|
mov dx, cx
|
||||||
|
rol ecx,16
|
||||||
|
div word [cs: SectorsPerTrack]
|
||||||
|
inc dl
|
||||||
|
mov bl, dl
|
||||||
|
xor dx,dx
|
||||||
|
div word [cs: HeadsPerDrive]
|
||||||
|
mov dh, [cs:temp]
|
||||||
|
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
|
||||||
|
push si
|
||||||
|
mov si,point
|
||||||
|
call showstr
|
||||||
|
pop si
|
||||||
|
jnc Done
|
||||||
|
dec si
|
||||||
|
jnz TryAgain
|
||||||
|
Done:
|
||||||
|
pop si
|
||||||
|
pop dx
|
||||||
|
pop ecx
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;============CLS==============
|
||||||
|
;Efface l'‚cran
|
||||||
|
;->
|
||||||
|
;<-
|
||||||
|
;=============================
|
||||||
|
cls:
|
||||||
|
push ax
|
||||||
|
mov ax,0x0003
|
||||||
|
int 0x10
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;==========SHOWSTR============
|
||||||
|
;Affiche une chaine de caractŠre point‚ par SI
|
||||||
|
;-> SI pointe une chaine
|
||||||
|
;<-
|
||||||
|
;=============================
|
||||||
|
showstr:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
push si
|
||||||
|
again:
|
||||||
|
lodsb
|
||||||
|
or al,al
|
||||||
|
jz fin
|
||||||
|
CALL showchar
|
||||||
|
jmp again
|
||||||
|
fin:
|
||||||
|
pop si
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;===========GETKEY=============
|
||||||
|
;N'Attend l'appuie d'une touche et
|
||||||
|
;renvoie en AL la touche appuyer
|
||||||
|
;->
|
||||||
|
;<- AL
|
||||||
|
;==============================
|
||||||
|
getkey:
|
||||||
|
mov ah,0x01
|
||||||
|
int 0x16
|
||||||
|
ret
|
||||||
|
|
||||||
|
;==========SHOWCHAR============
|
||||||
|
;Affiche un caractŠre point‚ dans AL
|
||||||
|
;-> AL
|
||||||
|
;<-
|
||||||
|
;==============================
|
||||||
|
showchar:
|
||||||
|
push ax
|
||||||
|
push bx
|
||||||
|
mov ah,0x0E
|
||||||
|
mov bx,0x07
|
||||||
|
int 0x10
|
||||||
|
pop bx
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
times 510-($-$$) db 0
|
||||||
|
|
||||||
|
dw 0xAA55
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,10 @@
|
||||||
|
struc part
|
||||||
|
Active resb 1
|
||||||
|
StartH resb 1
|
||||||
|
StartCS resw 1
|
||||||
|
Kind resb 1
|
||||||
|
EndH resb 1
|
||||||
|
EndCS resw 1
|
||||||
|
StartSector resd 1
|
||||||
|
NumSector resd 1
|
||||||
|
endstruc
|
|
@ -0,0 +1,130 @@
|
||||||
|
static u8 font8x8 [2048] = {
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x81, 0xA5, 0x81, 0xBD, 0x99, 0x81, 0x7E,
|
||||||
|
0x7E, 0xFF, 0xDB, 0xFF, 0xC3, 0xE7, 0xFF, 0x7E, 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00,
|
||||||
|
0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0x38, 0xFE, 0xFE, 0xD6, 0x10, 0x38,
|
||||||
|
0x10, 0x38, 0x7C, 0xFE, 0xFE, 0x7C, 0x10, 0x38, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00,
|
||||||
|
0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, 0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00,
|
||||||
|
0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF, 0x0F, 0x07, 0x0F, 0x7D, 0xCC, 0xCC, 0xCC, 0x78,
|
||||||
|
0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x3F, 0x33, 0x3F, 0x30, 0x30, 0x70, 0xF0, 0xE0,
|
||||||
|
0x7F, 0x63, 0x7F, 0x63, 0x63, 0x67, 0xE6, 0xC0, 0x18, 0xDB, 0x3C, 0xE7, 0xE7, 0x3C, 0xDB, 0x18,
|
||||||
|
0x80, 0xE0, 0xF8, 0xFE, 0xF8, 0xE0, 0x80, 0x00, 0x02, 0x0E, 0x3E, 0xFE, 0x3E, 0x0E, 0x02, 0x00,
|
||||||
|
0x18, 0x3C, 0x7E, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00,
|
||||||
|
0x7F, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x00, 0x3E, 0x61, 0x3C, 0x66, 0x66, 0x3C, 0x86, 0x7C,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x7E, 0x3C, 0x18, 0xFF,
|
||||||
|
0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00,
|
||||||
|
0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00,
|
||||||
|
0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00,
|
||||||
|
0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00,
|
||||||
|
0x18, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x18, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00,
|
||||||
|
0x38, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0x76, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00,
|
||||||
|
0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00,
|
||||||
|
0x38, 0x6C, 0xC6, 0xD6, 0xC6, 0x6C, 0x38, 0x00, 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00,
|
||||||
|
0x7C, 0xC6, 0x06, 0x1C, 0x30, 0x66, 0xFE, 0x00, 0x7C, 0xC6, 0x06, 0x3C, 0x06, 0xC6, 0x7C, 0x00,
|
||||||
|
0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x1E, 0x00, 0xFE, 0xC0, 0xC0, 0xFC, 0x06, 0xC6, 0x7C, 0x00,
|
||||||
|
0x38, 0x60, 0xC0, 0xFC, 0xC6, 0xC6, 0x7C, 0x00, 0xFE, 0xC6, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00,
|
||||||
|
0x7C, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0x7C, 0x00, 0x7C, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0x78, 0x00,
|
||||||
|
0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30,
|
||||||
|
0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00,
|
||||||
|
0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x7C, 0xC6, 0x0C, 0x18, 0x18, 0x00, 0x18, 0x00,
|
||||||
|
0x7C, 0xC6, 0xDE, 0xDE, 0xDE, 0xC0, 0x78, 0x00, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00,
|
||||||
|
0xFC, 0x66, 0x66, 0x7C, 0x66, 0x66, 0xFC, 0x00, 0x3C, 0x66, 0xC0, 0xC0, 0xC0, 0x66, 0x3C, 0x00,
|
||||||
|
0xF8, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0xFE, 0x62, 0x68, 0x78, 0x68, 0x62, 0xFE, 0x00,
|
||||||
|
0xFE, 0x62, 0x68, 0x78, 0x68, 0x60, 0xF0, 0x00, 0x3C, 0x66, 0xC0, 0xC0, 0xCE, 0x66, 0x3A, 0x00,
|
||||||
|
0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00,
|
||||||
|
0x1E, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xE6, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0xE6, 0x00,
|
||||||
|
0xF0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00,
|
||||||
|
0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
||||||
|
0xFC, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xCE, 0x7C, 0x0E,
|
||||||
|
0xFC, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0xE6, 0x00, 0x3C, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x3C, 0x00,
|
||||||
|
0x7E, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x3C, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
||||||
|
0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00,
|
||||||
|
0xC6, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0xC6, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x3C, 0x00,
|
||||||
|
0xFE, 0xC6, 0x8C, 0x18, 0x32, 0x66, 0xFE, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00,
|
||||||
|
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00,
|
||||||
|
0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
|
||||||
|
0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
|
||||||
|
0xE0, 0x60, 0x7C, 0x66, 0x66, 0x66, 0xDC, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC6, 0x7C, 0x00,
|
||||||
|
0x1C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00,
|
||||||
|
0x3C, 0x66, 0x60, 0xF8, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0x7C, 0x0C, 0xF8,
|
||||||
|
0xE0, 0x60, 0x6C, 0x76, 0x66, 0x66, 0xE6, 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00,
|
||||||
|
0x06, 0x00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0xE0, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0xE6, 0x00,
|
||||||
|
0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xD6, 0xD6, 0xD6, 0x00,
|
||||||
|
0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
||||||
|
0x00, 0x00, 0xDC, 0x66, 0x66, 0x7C, 0x60, 0xF0, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0x7C, 0x0C, 0x1E,
|
||||||
|
0x00, 0x00, 0xDC, 0x76, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x7E, 0xC0, 0x7C, 0x06, 0xFC, 0x00,
|
||||||
|
0x30, 0x30, 0xFC, 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
|
||||||
|
0x00, 0x00, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00,
|
||||||
|
0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0xFC,
|
||||||
|
0x00, 0x00, 0x7E, 0x4C, 0x18, 0x32, 0x7E, 0x00, 0x0E, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0E, 0x00,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x70, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x70, 0x00,
|
||||||
|
0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0x00,
|
||||||
|
0x7C, 0xC6, 0xC0, 0xC0, 0xC6, 0x7C, 0x0C, 0x78, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
|
||||||
|
0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00, 0x7C, 0x82, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
|
||||||
|
0xC6, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00, 0x30, 0x18, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
|
||||||
|
0x30, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x7E, 0xC0, 0xC0, 0x7E, 0x0C, 0x38,
|
||||||
|
0x7C, 0x82, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00, 0xC6, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00,
|
||||||
|
0x30, 0x18, 0x7C, 0xC6, 0xFE, 0xC0, 0x7C, 0x00, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00,
|
||||||
|
0x7C, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3C, 0x00,
|
||||||
|
0xC6, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x6C, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
|
||||||
|
0x18, 0x30, 0xFE, 0xC0, 0xF8, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x12, 0xFE, 0x90, 0xFE, 0x00,
|
||||||
|
0x3E, 0x6C, 0xCC, 0xFE, 0xCC, 0xCC, 0xCE, 0x00, 0x7C, 0x82, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
||||||
|
0xC6, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x30, 0x18, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
||||||
|
0x78, 0x84, 0x00, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x60, 0x30, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
|
||||||
|
0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0xFC, 0xC6, 0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x38, 0x00,
|
||||||
|
0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80,
|
||||||
|
0x38, 0x6C, 0x64, 0xF0, 0x60, 0x66, 0xFC, 0x00, 0x3A, 0x6C, 0xCE, 0xD6, 0xE6, 0x6C, 0xB8, 0x00,
|
||||||
|
0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x0E, 0x1B, 0x18, 0x3C, 0x18, 0xD8, 0x70, 0x00,
|
||||||
|
0x18, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00, 0x0C, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3C, 0x00,
|
||||||
|
0x0C, 0x18, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x18, 0x30, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
|
||||||
|
0x76, 0xDC, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x00, 0x76, 0xDC, 0x00, 0xE6, 0xF6, 0xDE, 0xCE, 0x00,
|
||||||
|
0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00, 0x00,
|
||||||
|
0x18, 0x00, 0x18, 0x18, 0x30, 0x63, 0x3E, 0x00, 0x7E, 0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E,
|
||||||
|
0x00, 0x00, 0x00, 0xFE, 0x06, 0x06, 0x00, 0x00, 0x63, 0xE6, 0x6C, 0x7E, 0x33, 0x66, 0xCC, 0x0F,
|
||||||
|
0x63, 0xE6, 0x6C, 0x7A, 0x36, 0x6A, 0xDF, 0x06, 0x18, 0x00, 0x18, 0x18, 0x3C, 0x3C, 0x18, 0x00,
|
||||||
|
0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00,
|
||||||
|
0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
|
||||||
|
0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x30, 0x60, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0x00,
|
||||||
|
0x7C, 0x82, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0x00, 0x18, 0x0C, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0x00,
|
||||||
|
0x7E, 0x81, 0x9D, 0xA1, 0xA1, 0x9D, 0x81, 0x7E, 0x36, 0x36, 0xF6, 0x06, 0xF6, 0x36, 0x36, 0x36,
|
||||||
|
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0xFE, 0x06, 0xF6, 0x36, 0x36, 0x36,
|
||||||
|
0x36, 0x36, 0xF6, 0x06, 0xFE, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0xC0, 0xC0, 0x7E, 0x18, 0x18,
|
||||||
|
0x66, 0x66, 0x3C, 0x7E, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0x18, 0x18,
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18,
|
||||||
|
0x76, 0xDC, 0x7C, 0x06, 0x7E, 0xC6, 0x7E, 0x00, 0x76, 0xDC, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0x00,
|
||||||
|
0x36, 0x36, 0x37, 0x30, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30, 0x37, 0x36, 0x36, 0x36,
|
||||||
|
0x36, 0x36, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x36, 0x36, 0x36,
|
||||||
|
0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00,
|
||||||
|
0x36, 0x36, 0xF7, 0x00, 0xF7, 0x36, 0x36, 0x36, 0x00, 0xC6, 0x7C, 0xC6, 0xC6, 0x7C, 0xC6, 0x00,
|
||||||
|
0x30, 0x7E, 0x0C, 0x7C, 0xCC, 0xCC, 0x78, 0x00, 0xF8, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0xF8, 0x00,
|
||||||
|
0x7C, 0x82, 0xFE, 0xC0, 0xFC, 0xC0, 0xFE, 0x00, 0xC6, 0x00, 0xFE, 0xC0, 0xFC, 0xC0, 0xFE, 0x00,
|
||||||
|
0x30, 0x18, 0xFE, 0xC0, 0xFC, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00,
|
||||||
|
0x0C, 0x18, 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x3C, 0x42, 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00,
|
||||||
|
0x66, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18,
|
||||||
|
0x30, 0x18, 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x30, 0x60, 0x38, 0x6C, 0xC6, 0x6C, 0x38, 0x00, 0x78, 0xCC, 0xCC, 0xD8, 0xCC, 0xC6, 0xCC, 0x00,
|
||||||
|
0x7C, 0x82, 0x38, 0x6C, 0xC6, 0x6C, 0x38, 0x00, 0x0C, 0x06, 0x38, 0x6C, 0xC6, 0x6C, 0x38, 0x00,
|
||||||
|
0x76, 0xDC, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x76, 0xDC, 0x38, 0x6C, 0xC6, 0x6C, 0x38, 0x00,
|
||||||
|
0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0xC0, 0xE0, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0xF0,
|
||||||
|
0xF0, 0x60, 0x7C, 0x66, 0x7C, 0x60, 0xF0, 0x00, 0x18, 0x30, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
||||||
|
0x7C, 0x82, 0x00, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x60, 0x30, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
|
||||||
|
0x18, 0x30, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0xFC, 0x0C, 0x18, 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x00,
|
||||||
|
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x7E, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xE1, 0x32, 0xE4, 0x3A, 0xF6, 0x2A, 0x5F, 0x86,
|
||||||
|
0x7F, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x00, 0x3E, 0x61, 0x3C, 0x66, 0x66, 0x3C, 0x86, 0x7C,
|
||||||
|
0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0C, 0x38,
|
||||||
|
0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00,
|
||||||
|
0x78, 0x0C, 0x38, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x18, 0x30, 0x7C, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
|
@ -0,0 +1,17 @@
|
||||||
|
FREEC=gcc -O2 -nostdinc -ffreestanding -fno-builtin -fomit-frame-pointer -Wall -I ../Include -c
|
||||||
|
PARTIAL=-r
|
||||||
|
OBJS= string.o vgatxt.o
|
||||||
|
|
||||||
|
all: makeall
|
||||||
|
|
||||||
|
makeall: $(OBJS)
|
||||||
|
(sync;ld $(PARTIAL) -o libs.o $(OBJS))
|
||||||
|
|
||||||
|
vgatxt.o:vgatxt.c
|
||||||
|
$(FREEC) $^
|
||||||
|
|
||||||
|
string.o:string.c
|
||||||
|
$(FREEC) $^
|
||||||
|
clean:
|
||||||
|
rm -f *.o
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
#define maxgraphmode 5
|
||||||
|
#define maxtextmode 5
|
||||||
|
|
||||||
|
static mode_def textmodes[maxtextmode] = {
|
||||||
|
|
||||||
|
/*MODE 0, 40*25 16 couleurs */
|
||||||
|
{
|
||||||
|
0x67,0x00,0x03,0x08,0x03,0x00,0x02,
|
||||||
|
0x2D,0x27,0x28,0x90,0x2B,0x0A,0xBF,0x1F,0x00,0x4F,0x0D,0x0E,0x00,0x00,0x00,0x00,
|
||||||
|
0x9C,0x8E,0x8F,0x14,0x1F,0x96,0xB9,0xA3,0xFF,
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x10,0x0E,0x00,0xFF,
|
||||||
|
0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
|
||||||
|
0x0C,0x00,0x0F,0x08,0x00,
|
||||||
|
40,25
|
||||||
|
},
|
||||||
|
|
||||||
|
/*MODE 1, 80*25 16 couleurs */
|
||||||
|
{
|
||||||
|
0x67,0x00,0x03,0x00,0x03,0x00,0x02,
|
||||||
|
0x5F,0x4F,0x50,0x82,0x55,0x81,0xBF,0x1F,0x00,0x4F,0x0D,0x0E,0x00,0x00,0x00,0x00,
|
||||||
|
0x9C,0x0E,0x8F,0x28,0x1F,0x96,0xB9,0xA3,0xFF,
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x10,0x0E,0x00,0xFF,
|
||||||
|
0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
|
||||||
|
0x0C,0x00,0x0F,0x08,0x00,
|
||||||
|
80,25
|
||||||
|
},
|
||||||
|
|
||||||
|
/*MODE 2, 80*50 16 couleurs */
|
||||||
|
{
|
||||||
|
0x63,0x00,0x03,0x01,0x03,0x01,0x02,
|
||||||
|
0x5F,0x4F,0x50,0x82,0x55,0x81,0xBF,0x1F,0x00,0x47,0x06,0x07,0x00,0x00,0x00,0x00,
|
||||||
|
0x9C,0x8E,0x8F,0x28,0x1F,0x96,0xB9,0xA3,0xFF,
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x10,0x0E,0x00,0xFF,
|
||||||
|
0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,0x10,0x11,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
|
||||||
|
0xCF,0x00,0x0F,0x00,0x00,
|
||||||
|
80,50
|
||||||
|
},
|
||||||
|
|
||||||
|
/*MODE 3, 100*50 16 couleurs */
|
||||||
|
{
|
||||||
|
0x67,0x00,0x03,0x01,0x03,0x01,0x02,
|
||||||
|
0x70,0x63,0x64,0x85,0x68,0x84,0xBF,0x1F,0x00,0x47,0x06,0x07,0x00,0x00,0x00,0x00,
|
||||||
|
0x9C,0x8E,0x8F,0x32,0x1F,0x96,0xB9,0xA3,0xFF,
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x10,0x0E,0x00,0xFF,
|
||||||
|
0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,0x10,0x11,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
|
||||||
|
0x0C,0x00,0x0F,0x00,0x00,
|
||||||
|
100,50
|
||||||
|
},
|
||||||
|
|
||||||
|
/*MODE 4, 100*60 16 couleurs */
|
||||||
|
{
|
||||||
|
0xA7,0x00,0x03,0x01,0x03,0x01,0x02,
|
||||||
|
0x70,0x63,0x64,0x85,0x68,0x84,0xFF,0x1F,0x00,0x47,0x06,0x07,0x00,0x00,0x00,0x00,
|
||||||
|
0xE7,0x8E,0xDF,0x32,0x1F,0xDF,0xE5,0xA3,0xFF,
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x10,0x0E,0x00,0xFF,
|
||||||
|
0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,0x10,0x11,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
|
||||||
|
0x0C,0x00,0x0F,0x00,0x00,
|
||||||
|
100,60
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static mode_def graphmodes[maxgraphmode] = {
|
||||||
|
/*MODE 80, 320*200 256 couleurs */
|
||||||
|
{
|
||||||
|
0x63,0x00,0x03,0x01,0x0F,0x00,0x06,
|
||||||
|
0x5F,0x4F,0x50,0x82,0x54,0x80,0xBF,0x1F,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
|
0x9C,0x0E,0x8F,0x28,0x00,0x96,0xB9,0xE3,0xFF,
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0F,0xFF,
|
||||||
|
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
|
||||||
|
0x41,0x00,0x0F,0x00,0x00,
|
||||||
|
40,25
|
||||||
|
},
|
||||||
|
|
||||||
|
/*MODE 81, 320*400 256 couleurs */
|
||||||
|
{
|
||||||
|
0x63,0x00,0x03,0x01,0x0F,0x00,0x06,
|
||||||
|
0x5F,0x4F,0x50,0x82,0x54,0x80,0xBF,0x1F,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
|
0x9C,0x8E,0x8F,0x28,0x00,0x96,0xB9,0xE3,0xFF,
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0F,0xFF,
|
||||||
|
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
|
||||||
|
0x41,0x00,0x0F,0x00,0x00,
|
||||||
|
40,50
|
||||||
|
},
|
||||||
|
|
||||||
|
/*MODE 82, 320*480 256 couleurs */
|
||||||
|
{
|
||||||
|
0xE3,0x00,0x03,0x01,0x0F,0x00,0x06,
|
||||||
|
0x5F,0x4F,0x50,0x82,0x54,0x80,0x0B,0x3E,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
|
0xEA,0xAC,0xDF,0x28,0x00,0xE7,0x06,0xE3,0xFF,
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0F,0xFF,
|
||||||
|
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
|
||||||
|
0x41,0x00,0x0F,0x00,0x00,
|
||||||
|
40,60
|
||||||
|
},
|
||||||
|
|
||||||
|
/*MODE 83, 360*480 256 couleurs */
|
||||||
|
{
|
||||||
|
0xE7,0x00,0x03,0x01,0x0F,0x00,0x06,
|
||||||
|
0x6B,0x59,0x5A,0x8E,0x5E,0x8A,0x0D,0x3E,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
|
0xEA,0xAC,0xDF,0x2D,0x00,0xE7,0x06,0xE3,0xFF,
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0F,0xFF,
|
||||||
|
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
|
||||||
|
0x41,0x00,0x0F,0x00,0x00,
|
||||||
|
45,60
|
||||||
|
},
|
||||||
|
|
||||||
|
/*MODE 84, 400*600 256 couleurs */
|
||||||
|
{
|
||||||
|
0xE7,0x00,0x03,0x01,0x0F,0x00,0x06,
|
||||||
|
0x74,0x63,0x64,0x97,0x68,0x95,0x86,0xF0,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
|
0x5B,0x8D,0x57,0x32,0x00,0x60,0x80,0xE3,0xFF,
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0F,0xFF,
|
||||||
|
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
|
||||||
|
0x41,0x00,0x0F,0x00,0x00,
|
||||||
|
50,75
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,11 @@
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
void memset(void *dst, u8 val, u16 count,u32 size)
|
||||||
|
{
|
||||||
|
u8 *temp;
|
||||||
|
for(temp = (u8 *)dst; count != 0; count--)
|
||||||
|
{
|
||||||
|
temp+=size;
|
||||||
|
*temp = val;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,88 @@
|
||||||
|
#include "vga.h"
|
||||||
|
#include "string.h"
|
||||||
|
#include "asm.h"
|
||||||
|
|
||||||
|
#include "modes.c"
|
||||||
|
#include "8x8fnt.c"
|
||||||
|
|
||||||
|
#define sequencer 0x3c4
|
||||||
|
#define misc 0x3c2
|
||||||
|
#define ccrt 0x3D4
|
||||||
|
#define attribs 0x3c0
|
||||||
|
#define graphics 0x3ce
|
||||||
|
#define state 0x3da
|
||||||
|
|
||||||
|
|
||||||
|
static u16 resX,resY,cursX,cursY; /* resolution x,y en caractères et position du curseur */
|
||||||
|
static u16 pages,pagesize,activepage; /* nombre de pages disponibles et taille d'une page */
|
||||||
|
static u8 vmode; /* mode en cours d'utilisation */
|
||||||
|
static u16 basemem; /* debut de la mémoire vidéo */
|
||||||
|
static bool scrolling,graphic; /* Activation du défilement, Flag du mode graphique */
|
||||||
|
|
||||||
|
|
||||||
|
void print (u8* string)
|
||||||
|
{
|
||||||
|
u8 *source,*screen;
|
||||||
|
source = string;
|
||||||
|
screen = (u8 *)TEXTSCREEN;
|
||||||
|
while(*source!=0x00)
|
||||||
|
{
|
||||||
|
*screen = *source;
|
||||||
|
screen+=2;
|
||||||
|
source++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cls (void)
|
||||||
|
{
|
||||||
|
memset((u8 *)TEXTSCREEN,0x20,(80*25*2),2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
u16 setvmode(u8 choosedmode)
|
||||||
|
{
|
||||||
|
u8 *def,i,mode;
|
||||||
|
|
||||||
|
mode=choosedmode&0x7F;
|
||||||
|
if (choosedmode>0x7F)
|
||||||
|
{
|
||||||
|
if (mode>maxgraphmode) return 1; /* mode inexistant */
|
||||||
|
def=(u8 *)&graphmodes[mode];
|
||||||
|
graphic=true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (mode>maxtextmode) return 1; /* mode inexistant */
|
||||||
|
def=(u8 *)&textmodes[mode];
|
||||||
|
graphic=false;
|
||||||
|
}
|
||||||
|
outb(misc,*def++);
|
||||||
|
outb(state,*def++);
|
||||||
|
for(i=0;i<5;i++)
|
||||||
|
{
|
||||||
|
outb(sequencer,i);
|
||||||
|
outb(sequencer+1,*def++);
|
||||||
|
}
|
||||||
|
outb(ccrt,0x11);
|
||||||
|
outb(ccrt+1,0x0E);
|
||||||
|
for(i=0;i<25;i++)
|
||||||
|
{
|
||||||
|
outb(ccrt,i);
|
||||||
|
outb(ccrt+1,*def++);
|
||||||
|
}
|
||||||
|
for(i=0;i<9;i++)
|
||||||
|
{
|
||||||
|
outb(graphics,i);
|
||||||
|
outb(graphics+1,*def++);
|
||||||
|
}
|
||||||
|
inb(state);
|
||||||
|
for(i=0;i<21;i++)
|
||||||
|
{
|
||||||
|
inb(attribs);
|
||||||
|
outb(attribs,i);
|
||||||
|
outb(attribs,*def++);
|
||||||
|
}
|
||||||
|
inb(state);
|
||||||
|
outb(attribs,0x20);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
all: makall
|
||||||
|
|
||||||
|
makall: boot/boot12.bin installer/mbrol.com lib/libs.o system/system.sys
|
||||||
|
sync
|
||||||
|
|
||||||
|
clean:
|
||||||
|
(cd system; make clean)
|
||||||
|
(cd boot; make clean)
|
||||||
|
(cd install; make clean)
|
||||||
|
(cd lib;make clean)
|
||||||
|
sync
|
||||||
|
|
||||||
|
backup: clean
|
||||||
|
(cd .. ; tar cf - cos | gzip -f - > backup.tar.gz)
|
||||||
|
|
||||||
|
allbackup: backup
|
||||||
|
(echo Inserez une disquette; sleep ; cp ../backup.tar.bz2 /dev/fd0)
|
||||||
|
|
||||||
|
system/system.sys:
|
||||||
|
(cd system; make)
|
||||||
|
|
||||||
|
boot/boot12.bin:
|
||||||
|
(cd boot; make)
|
||||||
|
|
||||||
|
installer/mbrol.com:
|
||||||
|
(cd install; make)
|
||||||
|
|
||||||
|
lib/libs.o:
|
||||||
|
(cd lib; make)
|
|
@ -0,0 +1,227 @@
|
||||||
|
[BITS 16]
|
||||||
|
[ORG 0x100]
|
||||||
|
|
||||||
|
SECTION .text
|
||||||
|
push cs
|
||||||
|
push cs
|
||||||
|
pop ds
|
||||||
|
pop es
|
||||||
|
call EnableA20
|
||||||
|
mov si,msgpmode
|
||||||
|
call showstr
|
||||||
|
mov ax,cs
|
||||||
|
mov [RealCS],ax
|
||||||
|
lea ax,[Real]
|
||||||
|
mov [RealIP],ax
|
||||||
|
|
||||||
|
xor eax,eax
|
||||||
|
mov ax,cs
|
||||||
|
shl eax,4
|
||||||
|
mov [GDT.Entry1+2],ax
|
||||||
|
mov [GDT.Entry2+2],ax
|
||||||
|
mov [GDT.Entry4+2],ax
|
||||||
|
mov [GDT.Entry5+2],ax
|
||||||
|
shr eax,16
|
||||||
|
mov [GDT.Entry1+4],al
|
||||||
|
mov [GDT.Entry2+4],al
|
||||||
|
mov [GDT.Entry4+4],al
|
||||||
|
mov [GDT.Entry5+4],al
|
||||||
|
|
||||||
|
xor eax,eax
|
||||||
|
mov ax,cs
|
||||||
|
shl eax,4
|
||||||
|
add eax,gdt0
|
||||||
|
mov [GDTR.Address],eax
|
||||||
|
lgdt [GDTR]
|
||||||
|
|
||||||
|
cli
|
||||||
|
;mov al,0xFF
|
||||||
|
;out 0x21,al
|
||||||
|
mov al,0x80
|
||||||
|
out 0x70,al
|
||||||
|
|
||||||
|
mov eax,cr0
|
||||||
|
or al,1
|
||||||
|
mov cr0,eax
|
||||||
|
|
||||||
|
jmp SYS_CODE_SEL:GoPMode32
|
||||||
|
|
||||||
|
GoPMode32:
|
||||||
|
[BITS 32]
|
||||||
|
mov ax,SYS_DATA_SEL
|
||||||
|
mov ds,ax
|
||||||
|
mov ecx,50000/4
|
||||||
|
cld
|
||||||
|
mov esi,kernel
|
||||||
|
mov edi,0x100000
|
||||||
|
mov ax,ALL_DATA_SEL
|
||||||
|
mov es,ax
|
||||||
|
mov gs,ax
|
||||||
|
mov fs,ax
|
||||||
|
mov ss,ax
|
||||||
|
rep movsd
|
||||||
|
mov ds,ax
|
||||||
|
mov esp,0x3fffff
|
||||||
|
call KERNEL_SEL:0x100000
|
||||||
|
jmp REAL_CODE_SEL:GoReal
|
||||||
|
|
||||||
|
GoReal:
|
||||||
|
[BITS 16]
|
||||||
|
mov ax,REAL_DATA_SEL
|
||||||
|
mov ds,ax
|
||||||
|
mov es,ax
|
||||||
|
mov ss,ax
|
||||||
|
mov gs,ax
|
||||||
|
mov fs,ax
|
||||||
|
mov esp,0xffff
|
||||||
|
|
||||||
|
mov eax,cr0
|
||||||
|
and al,0xFE
|
||||||
|
mov cr0,eax
|
||||||
|
|
||||||
|
jmp far [RealIP]
|
||||||
|
|
||||||
|
Real:
|
||||||
|
jmp Real
|
||||||
|
|
||||||
|
msgpmode db 'Pmode loader is loading',0
|
||||||
|
|
||||||
|
;======================SHOWSTR========================
|
||||||
|
;Affiche la chaine de caractère pointé par ds:si à l'écran
|
||||||
|
;-> DS, SI
|
||||||
|
;<- Flag Carry si erreur
|
||||||
|
;=====================================================
|
||||||
|
showstr:
|
||||||
|
pusha
|
||||||
|
Next_Char:
|
||||||
|
lodsb
|
||||||
|
or al,al
|
||||||
|
jz End_Show
|
||||||
|
mov ah,0x0E
|
||||||
|
mov bx,0x07
|
||||||
|
int 0x10
|
||||||
|
jmp Next_Char
|
||||||
|
End_Show:
|
||||||
|
popa
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;***********************EnableA20*******************************
|
||||||
|
;->
|
||||||
|
;<-
|
||||||
|
;Ouvre l'autoroute A20
|
||||||
|
;***************************************************************
|
||||||
|
EnableA20:
|
||||||
|
cli
|
||||||
|
call ClearKeybBuffer
|
||||||
|
call WaitKeybCommand
|
||||||
|
mov al,0xd1
|
||||||
|
out 0x64,al
|
||||||
|
call WaitKeybCommand
|
||||||
|
mov al,0xdf
|
||||||
|
out 0x60,al
|
||||||
|
call WaitKeybCommand
|
||||||
|
jmp A20Enabled
|
||||||
|
WaitKeybCommand:
|
||||||
|
in al,0x64
|
||||||
|
test al,0x02
|
||||||
|
jnz WaitKeybCommand
|
||||||
|
ret
|
||||||
|
ClearKeybBuffer:
|
||||||
|
in al,0x64
|
||||||
|
test al,0x01
|
||||||
|
jnz ReadKeyb
|
||||||
|
ret
|
||||||
|
ReadKeyb:
|
||||||
|
in al,0x60
|
||||||
|
jmp ClearKeybBuffer
|
||||||
|
A20Enabled:
|
||||||
|
sti
|
||||||
|
ret
|
||||||
|
|
||||||
|
section .data
|
||||||
|
|
||||||
|
RealIP: dw 0
|
||||||
|
RealCS: dw 0
|
||||||
|
|
||||||
|
GDTR:
|
||||||
|
.Size: dw GDT_END
|
||||||
|
.Address: dd 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
gdt0 equ $ ; null entry
|
||||||
|
GDT:
|
||||||
|
.Entry0: dw 0 ; limit 15:0
|
||||||
|
dw 0 ; base 15:0
|
||||||
|
db 0 ; base 23:16
|
||||||
|
db 0 ; type
|
||||||
|
db 0 ; limit 19:16, flags
|
||||||
|
db 0 ; base 31:24
|
||||||
|
|
||||||
|
|
||||||
|
SYS_CODE_SEL equ $-gdt0 ; code segment descriptor
|
||||||
|
|
||||||
|
.Entry1: dw 0xFFFF
|
||||||
|
dw 0x0 ; base
|
||||||
|
db 0x0 ; base
|
||||||
|
db 0x9A ; present, ring 0, code, non-conforming, readable
|
||||||
|
db 0x40 ; 32 bit
|
||||||
|
db 0
|
||||||
|
|
||||||
|
|
||||||
|
SYS_DATA_SEL equ $-gdt0 ; data segment descriptor
|
||||||
|
|
||||||
|
.Entry2: dw 0xFFFF
|
||||||
|
dw 0x0 ; base
|
||||||
|
db 0x0 ; base
|
||||||
|
db 0x92 ; present, ring 0, data, expand-up, writable
|
||||||
|
db 0x40 ; 32 bit
|
||||||
|
db 0
|
||||||
|
|
||||||
|
|
||||||
|
ALL_DATA_SEL equ $-gdt0 ; 4meg data segment descriptor
|
||||||
|
|
||||||
|
.Entry3: dw 0x03ff
|
||||||
|
dw 0x0 ; base
|
||||||
|
db 0x0 ; base
|
||||||
|
db 0x92 ; present, ring 0, data, expand-up, writable
|
||||||
|
db 0xcf ; 4k pages, 32 bit
|
||||||
|
db 0
|
||||||
|
|
||||||
|
|
||||||
|
REAL_CODE_SEL equ $-gdt0 ; code segment descriptor for 16 bit mode
|
||||||
|
|
||||||
|
.Entry4: dw 0xFFFF
|
||||||
|
dw 0x0 ; base
|
||||||
|
db 0x0 ; base
|
||||||
|
db 0x9A ; present, ring 0, code, non-conforming, readable
|
||||||
|
db 0x00 ; 16 bit
|
||||||
|
db 0
|
||||||
|
|
||||||
|
|
||||||
|
REAL_DATA_SEL equ $-gdt0 ; data segment descriptor for 16 bit mode
|
||||||
|
|
||||||
|
.Entry5: dw 0xFFFF
|
||||||
|
dw 0x0 ; base
|
||||||
|
db 0x0 ; base
|
||||||
|
db 0x92 ; present, ring 0, data, expand-up, writable
|
||||||
|
db 0x00 ; 16 bit
|
||||||
|
db 0
|
||||||
|
|
||||||
|
|
||||||
|
KERNEL_SEL equ $-gdt0 ; 4meg code segment descriptor
|
||||||
|
|
||||||
|
.Entry6: dw 0x03ff
|
||||||
|
dw 0x0 ; base
|
||||||
|
db 0x0 ; base
|
||||||
|
db 0x9A ; present, ring 0, code, non-conforming, readable
|
||||||
|
db 0xcf ; 4k pages, 32 bit
|
||||||
|
db 0
|
||||||
|
|
||||||
|
GDT_END equ $-gdt0 -1
|
||||||
|
|
||||||
|
kernel:
|
||||||
|
|
||||||
|
SECTION .bss
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
FREEC=gcc -O2 -nostdinc -ffreestanding -fno-builtin -fomit-frame-pointer -Wall -I ../Include -c -o
|
||||||
|
|
||||||
|
|
||||||
|
LINK=ld -Ttext 0x100000 -e __main -o
|
||||||
|
|
||||||
|
all: system.sys
|
||||||
|
sync
|
||||||
|
|
||||||
|
copy:
|
||||||
|
(cp system.sys /cygdrive/a)
|
||||||
|
|
||||||
|
copy2:
|
||||||
|
(cp system.sys /cygdrive/b)
|
||||||
|
|
||||||
|
system.sys:
|
||||||
|
nasm -f bin -o loader.bin loader.asm
|
||||||
|
nasm -f elf -o system.o system.asm
|
||||||
|
|
||||||
|
$(FREEC) systemc.o system.c
|
||||||
|
$(LINK) system.out systemc.o system.o ../lib/libs.o
|
||||||
|
objcopy -O binary system.out system.bin
|
||||||
|
cat loader.bin>system.sys
|
||||||
|
cat system.bin>>system.sys
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o
|
||||||
|
rm -f *.out
|
||||||
|
rm -f *.bin
|
||||||
|
rm -f *.sys
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
[BITS 32]
|
||||||
|
|
||||||
|
|
||||||
|
SECTION .text
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
#include "vga.h"
|
||||||
|
|
||||||
|
int __main(void) {
|
||||||
|
setvmode(1);
|
||||||
|
cls();
|
||||||
|
print("Hello cos is here !");
|
||||||
|
while(1);
|
||||||
|
}
|
Loading…
Reference in New Issue