1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
; SOS Boot Program 0.1
; Version originale par Eric Minso & Sébastien Goude
; http://cavinfo.fr.st/
; Modifié par Ganply
Code Segment
Assume Cs:Code, ds:code, ss:code
org 100h
; --- Initialisations ---
Debut:
Mov Ax, Cs
Mov Ds, Ax
Mov Es, Ax
; --- Récupération du nom du fichier passé en parametre dans la ligne de
; commande ---
mov al, cs:[80h] ; récup le nombre de caract du nom
mov cl, al
dec cx
mov bx, 0
Nom:
mov ah, byte ptr cs:[81h + bx + 1] ; récup le nom du fichier
mov byte ptr cs:[chaine + bx], ah
inc bx
loop nom
Ouverture:
lea dx, chaine ; ouvre le fichier
mov al, 0
mov ah, 3dh
int 21h
jnc ecriture
mov ah, 09h
mov dx, offset erreur2
int 21h
mov ah,00h
int 16h
jmp fin
Ecriture:
mov bx, ax ; charge le fichier dans le buffer
mov cx, 512
mov dx, offset buffer
xor ax,ax
mov ah, 3fh
int 21h
mov ah, 3eh
int 21h
; --- Affichage du message ---
Mov Ah, 09h
Mov Dx, Offset Message
Int 21h
; --- Attente d'une touche pour continuer ---
Mov Ax, 0C08h
Int 21h
; --- Copie du buffer sur disquette ---
Copie_Disquette:
Mov Ah, 00h
Mov Dl, 0
Int 13h
Mov Ax, 0301h
Mov Dx, 0
Mov Cx, 2
Lea Bx, Buffer
Int 13h
JNC Okay
; --- S'il y a eu une erreur ---
Inc Nb_Err
; --- S'il y a eu moins de 5 erreurs, on continue, sinon on sort ---
Cmp Nb_Err, 5
JL Copie_Disquette
; --- Message d'erreur ---
Mov Ah, 09h
Mov Dx, Offset Erreur
Int 21h
JMP Fin
; --- Message Ok ---
Okay:
Mov Ah, 09h
Mov Dx, Offset Ok
Int 21h
; --- Quitter le programme et retourner à MS-DOS ---
Fin:
Mov Ax, 4C00h
Int 21h
Buffer DB 512 Dup(0)
Ok DB "Copie Ok.",10,13,"La disquette boot est OK, vous pouvez redmarrer votre PC.",10,13,36
Erreur DB "Erreur de copie sur disquette",10,13,36
erreur2 DB "Erreur de lecture",10,13,36
Message DB "Introduisez une disquette vierge dans le lecteur A:",10,13,36
Nb_Err DB 0
chaine DB 127 dup(00h)
Code EndS
End Debut |
Partager