Boot system [Fermé]

Signaler
Messages postés
114
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
9 avril 2007
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
salut

je viens de trouver ce code qui permer de lancer un fichier sur une disquettr a:
exemple system

je voudrais qu il me lance le jeu pong sur a: 
j ai deja essayer en mettant le org 7E00H  comme dans system

le jeu demarre pas

<li>.model tiny
</li><li>.CODE
</li><li>                ORG 7E00H                                          
</li><li>START:
</li><li>                                 
</li><li> jmp debut
</li><li>
</li><li>; boot secteur info
</li><li>
</li><li>  BootSecteur_FAT12 db 59 dup (?)
</li><li> ; BootSecteur_FAT16 db 59 dup (?)
</li><li> ; BootSecteur_FAT32 db 87 dup (?)
</li><li> ; BootSecteur_NTFS db 81 dup (?)
</li><li>
</li><li>
</li><li>;===================================================================
</li><li> afficheball proc near
</li><li>; affiche la baballe (x,y)-> (bx,ax), couleur=cl,ch
</li><li>
</li><li>
</li><li>  mov dx,320  ; di=bx+ax*320
</li><li>  mul dx
</li><li>  add ax,bx
</li><li>  mov di,ax
</li><li>
</li><li>  mov es:[di-320],cl
</li><li>  mov es:[di-1],cl
</li><li>  mov es:[di+1],cl
</li><li>  mov es:[di+320],cl 
</li><li>  mov es:[di],ch
</li><li>  ret
</li><li> afficheball endp
</li><li>;===================================================================
</li><li>;===================================================================
</li><li>;===================================================================
</li><li>;===================================================================
</li><li>;===================================================================
</li><li>
</li><li>debut:
</li><li> cld
</li><li> ;initialisation mode graphique
</li><li>
</li><li> mov AX,13h
</li><li> int 10h
</li><li>
</li><li> mov ax,0a000h    ; init variable
</li><li> mov es,ax
</li><li> mov ds,ax
</li><li>
</li><li>;===================================================================
</li><li>; affichefond
</li><li>
</li><li>
</li><li>  mov di,320*8
</li><li>  mov cx,6
</li><li>  mov al,1Fh
</li><li>  bord1:
</li><li>  push cx
</li><li>   mov cx,320
</li><li>   rep stosb
</li><li>  pop cx
</li><li>   sub al,02h
</li><li>  loop bord1
</li><li>
</li><li>
</li><li>  mov es:[di],320*14
</li><li>  mov es:[di],1715h
</li><li>  mov es:[di+2],1B19h
</li><li>  mov es:[di+4],1F1Dh
</li><li>
</li><li>  mov es:[di+320-6],1D1Fh
</li><li>  mov es:[di+320-4],191Bh
</li><li>  mov es:[di+320-2],1517h
</li><li>
</li><li>  mov si,320*14
</li><li>  mov di,320*15
</li><li>  mov cx,320*184
</li><li>  rep movsb
</li><li>
</li><li>
</li><li>;===================================================================
</li><li>
</li><li>
</li><li> mov si,64000                    ; si pointe vers les données
</li><li> mov ax,00A0h
</li><li> mov es:[si],ax     ; position de la raquette
</li><li> mov es:[si+2],ax   ; position X
</li><li> mov es:[si+4],ax   ; position Y
</li><li> mov es:[si+6],word ptr(0103h)   ; vitesse VX,VY
</li><li> mov es:[si+8],word ptr(0028h)   ; longueur raquette
</li><li>; mov es:[si+10],word ptr(0000h)  ; points
</li><li>
</li><li> xor bx,bx
</li><li> mov cx,128
</li><li> tracepal:
</li><li> mov es:[si+12+bx],cl
</li><li> inc bx
</li><li> loop tracepal
</li><li>
</li><li>
</li><li>
</li><li>;************************
</li><li> boucleprincipale:         ; boucle principale
</li><li>
</li><li>
</li><li>
</li><li>;===================================================================
</li><li>  mov bx,es:[si+2]
</li><li>  mov ax,es:[si+4]
</li><li>
</li><li>  push bx
</li><li>  push ax
</li><li>
</li><li>; efface la balle
</li><li>
</li><li>  xor cx,cx
</li><li>  call afficheball
</li><li>
</li><li>
</li><li>  pop ax
</li><li>  pop bx
</li><li>
</li><li>  mov cx,es:[si+6] ; faible=vx, fort=vy
</li><li>                   ; 1=-1    3=1
</li><li>  push cx
</li><li>
</li><li>  sub bx,2         ; x=x+-1
</li><li>  xor ch,ch
</li><li>  add bx,cx
</li><li>
</li><li>  pop cx
</li><li>  cmp bx,311       ; collision  avec me mur de droite
</li><li>  jb ok_bord3      ; non, on continue
</li><li>   mov cl,1        ; oui, on inverse la vapeur!!!
</li><li>  ok_bord3:
</li><li>
</li><li>  cmp bx,8         ; collision  avec me mur de gauche
</li><li>  ja ok_bord1      ; non, on continue
</li><li>   mov cl,3        ; oui, on inverse la vapeur!!!
</li><li>  ok_bord1:
</li><li>
</li><li>
</li><li>  sub ax,2         ;y=y+-1
</li><li>  add al,ch
</li><li> 
</li><li>  cmp ax,15        ; collision  avec me mur d'en haut
</li><li>  ja ok_bord2      ; non, on continue
</li><li>   mov ch,3        ; oui, on inverse la vapeur!!!
</li><li>  ok_bord2:
</li><li>
</li><li> 
</li><li>
</li><li>  mov es:[si+2],bx ; sauvegarde x, y, vx,vy
</li><li>  mov es:[si+4],ax
</li><li>  mov es:[si+6],cx
</li><li>
</li><li>  mov cx,0e06h
</li><li>  call afficheball
</li><li> 
</li><li> 
</li><li>;===================================================================
</li><li>
</li><li>
</li><li>                       ; traitememt de la raquette
</li><li>                       ; efface la raquette
</li><li>
</li><li>
</li><li> mov di,320*195+6
</li><li> mov cx,308
</li><li> xor al,al
</li><li> rep stosb
</li><li>
</li><li>                      ;   affiche raquette
</li><li> mov cx,es:[si+8]
</li><li> push cx
</li><li> mov ax,es:[si]     
</li><li> push ax
</li><li>
</li><li> add ax,195*320
</li><li> mov di,ax
</li><li> mov si,64000+45
</li><li>
</li><li> rep movsb
</li><li> mov si,64000
</li><li>
</li><li>
</li><li>
</li><li>;===================================================================
</li><li>
</li><li> pop dx           ; bouge la raquette
</li><li> mov ah,02h       ; recupere l'etat du clavier
</li><li> int 16h
</li><li> and al,3         ; seulement les touches shifts
</li><li> pop cx           ; recupere la longueure de la raquette
</li><li> cmp al,1         ; si byte 1, on bouge à droite
</li><li> jne pas_a_droite ; non => pas_a_droite
</li><li> add cx,dx
</li><li> cmp cx,312       ; on regarde si ca passe
</li><li> ja pas_a_droite  ; non => pas_a_droite
</li><li> add dx,2         ; oui, on avance de 2
</li><li> pas_a_droite:   
</li><li>
</li><li> cmp al,2         ; si byte 2, on bouge à gauche
</li><li> jne pas_a_gauche ; non => pas_a_gauche
</li><li>  cmp dx,7        ; on regarde si ca passe
</li><li>  jb pas_a_gauche  ;non => pas_a_gauche
</li><li>  sub dx,2        ; oui, on recule
</li><li> pas_a_gauche:
</li><li>
</li><li> mov es:[si],dx   ; on sauve la position
</li><li>
</li><li>
</li><li> mov ax,dx        ; ax=position de la raquette
</li><li> mov bx,es:[si+2] ; bx=X
</li><li> mov cx,es:[si+4] ; cx=Y
</li><li> mov dx,es:[si+6] ; dx=vx,vy
</li><li>                  ; cas au niveau de la raquette
</li><li>
</li><li> cmp cx,195       ; si c'est pas en bas, on ne traite pas la collision avec la raquette
</li><li> jne suiteboucle
</li><li>
</li><li>  cmp ax,bx       ; a gauche de la raquette?
</li><li>  ja fin          ; oui => fin
</li><li>
</li><li>  add ax,es:[si+8]
</li><li>  cmp ax,bx        ; a droite de la raquette?
</li><li>  jb fin           ; oui => fin
</li><li>
</li><li>                   ; ni a gauche, ni a droite, alors rebond
</li><li>
</li><li>  mov es:[si+7],byte ptr 1 ; sauve  vy=1
</li><li>
</li><li>
</li><li>
</li><li> inc word ptr es:[si+10]   ; on ajoute un point
</li><li>
</li><li>  mov ah,02h       ; on affiche les points
</li><li>  xor bh,bh
</li><li>  mov dx,0012h     ; a la position ligne 0, colonne 12
</li><li>  int 10h
</li><li>
</li><li>
</li><li>  mov ax,es:[si+10]; decompose les points
</li><li>  push ax
</li><li>
</li><li>  mov bx,10        ; sur 5 chiffres
</li><li>  mov cx,5
</li><li>  decomp:
</li><li>   xor dx,dx
</li><li>   div bx
</li><li>   push dx
</li><li>  loop decomp
</li><li>
</li><li>
</li><li>
</li><li>  mov cx,5
</li><li>  xor bl,bl
</li><li>
</li><li>  affpt:
</li><li>   pop ax
</li><li>   add ax,30h
</li><li>   mov ah,0Eh
</li><li>   inc bl
</li><li>   int 10h
</li><li>  loop affpt
</li><li>
</li><li>
</li><li>  pop cx
</li><li>  and cx,3           ; on diminue la raquette que tout les 4 points
</li><li>  jnz suiteboucle
</li><li>
</li><li>  cmp word ptr es:[si+8],8   ; raquette plus petite que 8
</li><li>  jb suiteboucle     ; oui, on continue
</li><li>  sub word ptr es:[si+8],2   ; non, on la diminue
</li><li> 
</li><li> suiteboucle:
</li><li>
</li><li>
</li><li>
</li><li>; attend le retour vertical du rayon catodique
</li><li>  mov dx,3dah       
</li><li> pause:
</li><li>  in al,dx          
</li><li>  test al,08h       
</li><li> jz pause
</li><li>
</li><li> jmp boucleprincipale
</li><li>
</li><li> fin:
</li><li>
</li><li> jmp debut
</li><li>
</li><li>END START                                      
</li><li>
</li>

6 réponses

Messages postés
114
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
9 avril 2007

je pense donc que c est impossible de lancer un jeux sous un boot


sans avoir charger le dos


mais est il  possible de charger le dos en utlisant la technique de dessus


 
Messages postés
114
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
9 avril 2007

pouquoi ne fabrique t on pas un dos qui se charge en meme temps que le bios dans une eeprom
et qu on peut mettre a jour
Messages postés
114
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
9 avril 2007

ou peut on trouver les codes sources asm d un chargement dun dos a partir d une disquette

du boot jusqua la ligne de commande

ça serait interessant
Messages postés
116
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
10 avril 2013
1
NON, l'interruption 10h (Video) et 16h (Clavier) font partie du BIOS, elles sont déjà là avant MS-DOS.
MS-DOS n'est indispensable que si le programme appelle l'interruption 21h !!!
Ce qui n'a pas l'air d'être le cas...

Par contre j'ai des doutes sur l'addresse 7E00h, de tête il me semble plutôt que le boot soit charger en 7C00h (mais pas sûr, à vérifier)
Messages postés
116
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
10 avril 2013
1
Pour que le boot soit bootable, ces deux derniers octets doivent contenir: AA55h
Soit à l'addresse 510 !
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
limite foutage de gueule quand même...
tout est encore dans le thread principal mais les doublons se cumulent....

clos
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp