Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
947 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  Boot sector, coder un petit jeu ?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Boot sector, coder un petit jeu ?

n°2351183
citation
Posté le 07-04-2020 à 22:18:41  profilanswer
 

Bonjour,
 
Un peu à la ramasse, la catégorie ASM   :whistle:  
 
Je viens ici suite au visionnage de la série BOOT SECTOR GAMES sur youtube (exemple : invaders)
il s'agit de coder dans le secteur de boot (d'une clé USB par exemple) pour qu'un PC boote dessus et lance le jeu qui ne doit pas dépasser 512 octets !
https://s19.directupload.net/images/200407/odj8czpn.png
En tant qu'amateur j'ai essayé pleins de trucs pour pouvoir écrire dans ce fameux secteur
Grace aux fonction windows createfile, writefile, j'ai réussi dans le sens ou je peux maintenant faire booter la clé usb sur le code que je veux
Donc ça a bien écrit réellement sur la clé
Mais j'ai rencontré un problème plutôt bizarre et c'est le sujet du topic :
 
j'ai pu écrire sur le secteur de boot (à l'arrache), ça marche donc je veux coder autre chose, mais maintenant windows ne reconnait plus la clé et propose de la formater
je la formate donc, elle est bien détectée par windows, vierge, tout est ok
Et quand je lance un programme (HxD) pour lire les secteurs de la clé fraichement formatée, le secteur de boot a bien été formaté
Mais quand je refais booter cette clé "vierge", elle me ré-exécute le code que j'avais posé avant de formater
Or, HxD ne me retrouve aucun bout de ce code quand j'effectue une recherche sur toute la clé, secteur par secteur
J'ai utilisé diskpart de windows pour supprimer la partition, en recréer une, puis reformater
J'ai aussi formate la clé sous linux
Mais c'est toujours mon ancien bout de code qui s’exécute quand je boote avec la clé !
 
La seule solution que j'ai fini par trouver c'est de flasher ma clé avec une image de linux bootable (à l'aide de BalenaEtcher), puis de la formater sous windows
Et là je pouvais continuer à faire joujou
 
Malgré mes recherches, je n'ai rien trouvé qui parle de ça, puis je n'arrive pas trop à formuler le problème, j'espère que quelqu'un aura compris  :(  
 
 
 
tldr
Savez vous d'où viens ce bug bizarre ? du code sur une clé usb s’exécute au démarrage du pc, mais ce code est impossible à trouver sur ladite clé
 
Bon confinement :hello:


Message édité par citation le 16-04-2020 à 08:20:02
mood
Publicité
Posté le 07-04-2020 à 22:18:41  profilanswer
 

n°2351513
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 11-04-2020 à 14:16:53  profilanswer
 

Pourquoi ne pas utiliser la commande dd pour écrire sur ton bootsector ?

 
Code :
  1. dd if=chemin\vers\ton\fichier of=\\.\X: bs=512 count=1
 

X: est la lettre du lecteur sur lequel tu veux écrire.

 

Cette commande existe pour Windows ( http://www.chrysocome.net/dd )

Message cité 1 fois
Message édité par Harkonnen le 11-04-2020 à 14:17:33

---------------
J'ai un string dans l'array (Paris Hilton)
n°2351535
rat de com​bat
attention rongeur méchant!
Posté le 11-04-2020 à 20:43:51  profilanswer
 

Attention avec dd, faut surtout pas se tromper de disque!! :o

n°2351545
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 11-04-2020 à 23:47:54  profilanswer
 

Ca va de soi, comme avec format d'ailleurs :D


---------------
J'ai un string dans l'array (Paris Hilton)
n°2351592
citation
Posté le 12-04-2020 à 21:34:40  profilanswer
 

Harkonnen a écrit :

Pourquoi ne pas utiliser la commande dd pour écrire sur ton bootsector ?
 

Code :
  1. dd if=chemin\vers\ton\fichier of=\\.\X: bs=512 count=1


 
X: est la lettre du lecteur sur lequel tu veux écrire.
 
Cette commande existe pour Windows ( http://www.chrysocome.net/dd )


Salut, et merci pour la réponse
J'utilise lazarus free pascal sous windows 10, et je ne vois pas comment implémenter cette fonction !
J'aurais volontiers installé tout mon bazar sous linux, mais je crois avoir trouvé la solution
Je crois qu'en bidouillant, je corromps la structure logique du lecteur,  
Mais quand je remplace \\.\X: par \\.\PHYSICALDRIVEX, ça marche !! (sauf que là, X est le numéro du disque 0,1,2,.. et pas c: d: etc)  
Il faut attaquer directement le lecteur physique
Mais comme pour dd, j'imagine qu'il ne faut pas se tromper
Ta commande a l'air dangereuse, mais c'est super interessant
Bref, je vais enfin pouvoir faire de l'assembleur [:obawi]
 
Mon soucis était justement que le lecteur n'était plus accessible par sa lettre (c:, d:, etc)


Message édité par citation le 12-04-2020 à 21:48:53
n°2351821
citation
Posté le 16-04-2020 à 00:03:46  profilanswer
 

Petit up ! :hello:  
 
Bon bah ça avance un petit peu
j'ai pu coder une petite anim d'une balle qui rebondit indefiniment
une sorte de hello world graphique :d
 
c'est en mode 320 x 200 pixels, 256 couleurs

Code :
  1. mov ax,0x13
  2. int 0x10


mais cela prends quasiment les 512 octets du secteur boot !
et puis ça n'a rien d'un jeu  
j'essaierais bien de faire un tetris-like, mais si quelqu'un a d'autres idees j'ecoute
 
https://i.imgur.com/V79KMKW.png
pas eu le courage de faire un gif animé, mais c'est fluide
 
On supporte le confinement comme on peut !

n°2351822
rat de com​bat
attention rongeur méchant!
Posté le 16-04-2020 à 00:20:57  profilanswer
 

citation a écrit :

mais si quelqu'un a d'autres idees j'ecoute

C'est pas exactement un jeu, mais pourquoi pas le jeu de la vie de Conway, en honneur à son inventeur récemment décédé?

n°2351831
citation
Posté le 16-04-2020 à 07:48:32  profilanswer
 

rat de combat a écrit :

C'est pas exactement un jeu, mais pourquoi pas le jeu de la vie de Conway, en honneur à son inventeur récemment décédé?


Très bonne idée !  
Je vais tenter ça

n°2351843
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-04-2020 à 09:45:30  profilanswer
 

Sinon tu peux tenter un Doom : https://www.youtube.com/watch?v=b54xmA0uqlE


---------------
J'ai un string dans l'array (Paris Hilton)
n°2351848
citation
Posté le 16-04-2020 à 10:57:04  profilanswer
 

Oui j'ai vu :d
j'avoue que c'est impressionnant, pour 1 demi Ko
mais je vais commencer par conway, ça parait + simple [:abstro:1]

mood
Publicité
Posté le 16-04-2020 à 10:57:04  profilanswer
 

n°2352056
citation
Posté le 19-04-2020 à 11:04:47  profilanswer
 

Bonjour,
 
bon je pense avoir fini le code pour le jeu de la vie de conway
c'est assez lent mais ça fonctionne :)
 
https://i.imgur.com/M9is8fk.png
 
https://i.imgur.com/DWzfEPU.png
 
 
pour ceux que le code intéresse
 
je vais pouvoir essayer tétris, ça va être une autre paire de manche

n°2352607
citation
Posté le 26-04-2020 à 20:38:09  profilanswer
 

up :bounce:  
 
après de nombreuses prises de tete, j'ai un petit tetris fonctionnel
 
https://i.imgur.com/vceYIqK.png
 
le hic, c'est qu'une fois assemblé il fait 789 octets, donc ça rentre pas sur le mbr
je pense avoir testé toutes les optimisations possibles, mais je cale un peu
et je veux toujours croire que ça peu rentrer dans 512o
 
si vous connaissez des astuces je veux bien tenter!
 
code
 
vous pouvez l'essayer si vous avez dosbox, voici le .com
 
 

n°2352612
antac
..
Posté le 26-04-2020 à 21:09:43  profilanswer
 

Je suis pas du tout un adepte de l'ASM mais en tout cas félicitations déjà !
Ce n'est pas un topic à la Jovalise

n°2352635
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-04-2020 à 00:28:18  profilanswer
 

citation a écrit :


le hic, c'est qu'une fois assemblé il fait 789 octets, donc ça rentre pas sur le mbr
je pense avoir testé toutes les optimisations possibles, mais je cale un peu
et je veux toujours croire que ça peu rentrer dans 512o


As tu besoin d'avoir une jolie palette avec des dégradés ? J'ai regardé ton source, et je ne serais pas surpris que tu arrives à ton but en virant la création des dégradés de la fonction palette et en te contentant d'aplats de couleur. Félicitations en tout cas


Message édité par Harkonnen le 27-04-2020 à 00:28:35

---------------
J'ai un string dans l'array (Paris Hilton)
n°2352647
citation
Posté le 27-04-2020 à 08:27:19  profilanswer
 

Oui, mon défi c’était tetris en mode graphique, donc profiter des pixels et du "gros" choix de couleurs (256)
Mais tu as raison, parmi les couleurs par défaut, je devrais pouvoir me débrouiller
j'aurais bien voulu aussi ajouter des petits sons, mais c'est mal barré niveau place
En tous cas merci pour vos encouragements !

n°2352730
rufo
Pas me confondre avec Lycos!
Posté le 27-04-2020 à 22:52:39  profilanswer
 

Effectivement, bravo de faire tenir tout ça en si peu de place. Ca change des programmes codés avec les pieds qui, pour afficher une pauvre fenêtre avec quelques messages en Java fait 25 Mo  :whistle:  
 
Pour tes pbs de place, pourquoi tu ne fais pas un simple chargeur dans les 512o qui se charge de lancer ton jeu stocké dans un espace où y'a plus de place ? C'est comme ça que fait le bootloader de Windows, par ex.
 
Edit : l'ASM, ça me rappelle ma 2ème année d'école d'ingé où on devait coder en ASM un noyau multi-tâches : au moins 3 tâches (un producteur-consommateur, un mutex et une tâche libre). Pour le mutex, j'avais fait un carrefour avec 2 feux tricolores. En ASM, là, t'as pas le choix, faut commenter ton code, sinon, tu reviens 2j après, tu sais plus ce que fait telle ou telle partie du code :/

Message cité 2 fois
Message édité par rufo le 27-04-2020 à 22:55:41

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2352733
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-04-2020 à 23:27:33  profilanswer
 

rufo a écrit :

Effectivement, bravo de faire tenir tout ça en si peu de place. Ca change des programmes codés avec les pieds qui, pour afficher une pauvre fenêtre avec quelques messages en Java fait 25 Mo :whistle:


Ou bien des jeux d'échecs en Ada et HTML  :whistle:

 
rufo a écrit :


Pour tes pbs de place, pourquoi tu ne fais pas un simple chargeur dans les 512o qui se charge de lancer ton jeu stocké dans un espace où y'a plus de place ? C'est comme ça que fait le bootloader de Windows, par ex.


Parce que c'est justement son défi : faire tenir son jeu dans 512 octets  :D


---------------
J'ai un string dans l'array (Paris Hilton)
n°2352735
rufo
Pas me confondre avec Lycos!
Posté le 27-04-2020 à 23:40:45  profilanswer
 

Toute ressemblance avec une situation ou des personnages connus serait pure coïncidence :whistle:  
 
Pas évident de faire toute tenir dans 512o. Sacré défi  :sol:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2352747
citation
Posté le 28-04-2020 à 10:23:36  profilanswer
 

rufo a écrit :


Edit : l'ASM, ça me rappelle ma 2ème année d'école d'ingé où on devait coder en ASM un noyau multi-tâches : au moins 3 tâches (un producteur-consommateur, un mutex et une tâche libre). Pour le mutex, j'avais fait un carrefour avec 2 feux tricolores. En ASM, là, t'as pas le choix, faut commenter ton code, sinon, tu reviens 2j après, tu sais plus ce que fait telle ou telle partie du code :/


C'est clair, moi qui oublie souvent de commenter, là ça me force et c'est pas plus mal

rufo a écrit :

Pas évident de faire toute tenir dans 512o. Sacré défi  :sol:


 :jap:  
 
Bon j'ai suivi les conseils de harkonnen, j'ai viré la modif de la palette et le dessin : les cubes ne sont plus que des carrés mais j'ai bien gagné une soixantaine d'octets!
Puis j'ai pu gratter qq octets par ci par là, mais je crois bien que maintenant je ne peux plus rien factoriser!
Le code fait désormais 654o

n°2352759
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 28-04-2020 à 11:52:11  profilanswer
 

citation a écrit :


 :jap:  
 
Bon j'ai suivi les conseils de harkonnen, j'ai viré la modif de la palette et le dessin : les cubes ne sont plus que des carrés mais j'ai bien gagné une soixantaine d'octets!
Puis j'ai pu gratter qq octets par ci par là, mais je crois bien que maintenant je ne peux plus rien factoriser!
Le code fait désormais 654o


Après tu peux compresser ton exécutable et inclure la routine de décompression dans son entête, et le décompresser vers une autre région de la mémoire. Ensuite, un petit jmp vers cette région au tout début de ton programme. C'est de la triche, mais techniquement, ça fait quand même tenir ton jeu dans les 512 octets :D


---------------
J'ai un string dans l'array (Paris Hilton)
n°2352798
citation
Posté le 28-04-2020 à 17:18:07  profilanswer
 

Harkonnen a écrit :


Après tu peux compresser ton exécutable et inclure la routine de décompression dans son entête, et le décompresser vers une autre région de la mémoire. Ensuite, un petit jmp vers cette région au tout début de ton programme. C'est de la triche, mais techniquement, ça fait quand même tenir ton jeu dans les 512 octets :D


Ah mais je ne prend pas ça pour de la triche, oui ça fait partie du jeu, tant que le code tient dans un seul secteur, peu importe ce qu'il fait :d
oui j'avais pensé à la compression, je crois que les demomakers utilisent parfois cette technique dans les concours - mais je ne vois pas quel algo simple je pourrais implémenter en peu d'instructions (j'imagine que la complexité des algos est équivalente pour ce qui est de compression<->décompression)
je suis actuellement à 642o pour tetris...
je vais faire le tour des algos existants :jap:

n°2352858
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-04-2020 à 08:46:07  profilanswer
 

citation a écrit :


oui j'avais pensé à la compression, je crois que les demomakers utilisent parfois cette technique dans les concours


Je confirme  :whistle:  
 

citation a écrit :


 
 - mais je ne vois pas quel algo simple je pourrais implémenter en peu d'instructions (j'imagine que la complexité des algos est équivalente pour ce qui est de compression<->décompression)


Tu peux regarder du coté de Crinkler, c'est un compresseur d'exécutables justement développé pour les intros 4K, voire moins.
 
Tu as un très bon post qui explique son fonctionnement ici :  
https://code4k.blogspot.com/2010/12 [...] table.html


---------------
J'ai un string dans l'array (Paris Hilton)
n°2352921
citation
Posté le 29-04-2020 à 19:30:23  profilanswer
 

Harkonnen a écrit :


Je confirme  :whistle:  
 


 

Harkonnen a écrit :


Tu peux regarder du coté de Crinkler, c'est un compresseur d'exécutables justement développé pour les intros 4K, voire moins.
 
Tu as un très bon post qui explique son fonctionnement ici :  
https://code4k.blogspot.com/2010/12 [...] table.html


en effet, c'est un super post !
par contre, de ce que j'ai lu jusqu'ici, le code de décompression prendrait au moins 200o !
quand ton code fait 4ko c'est super utile, mais là pour moi ça veut dire, que mon code compressé devra faire dans les 300o
donc il faudrait que le taux de compression tourne autour des 50%, ce qui me parait irréel !
mais bon ça m'envoie sur le codage arithmétique, qui a l'air d’être une bonne piste :jap:  

n°2352923
rufo
Pas me confondre avec Lycos!
Posté le 29-04-2020 à 20:20:31  profilanswer
 

J'ai lu aussi l'article. Je pense qu'il va au-delà de 50% de compression. Du reste, ce taux n'est pas ouf. Sur du texte, on arrive à des taux de compression de l'ordre de 70-75%.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2352925
citation
Posté le 29-04-2020 à 21:25:51  profilanswer
 

Oui il dépasse même les 50%, mais le fichier de base (déjà optimisé) fait quand même 9796o
De plus, le logiciel ne compresse pas directement un fichier lambda comme ça, en tous cas pas aussi directement que j'aurais voulu
Toutefois ça reste une bonne piste, encore faut t il comprendre comment ça marche !
Je comprends le taux de 75% pour le texte, car il n'y a pas beaucoup d'entropie

n°2352932
rufo
Pas me confondre avec Lycos!
Posté le 29-04-2020 à 22:30:11  profilanswer
 

De ce que j'ai compris du compresseur, c'est qu'il réarrange les données pour avoir un ordre qui maximise la compression des données, et qu'il compresse différemment la partie code.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2352934
citation
Posté le 29-04-2020 à 22:49:15  profilanswer
 

Oui, j'ai compris pareil :d
Seulement dans mon .com, la partie des données ne fait que 56o
Et c'était justement cette partie qui aurait dû me faire gagner de la place
et quand je vois la tronche du reste du code en ascii, ça ne m'a plus l'air trop factorisable !
Mais bon je suis sceptique, mais je vais quand même voir ça plus en profondeur
 

n°2352937
rufo
Pas me confondre avec Lycos!
Posté le 29-04-2020 à 22:52:47  profilanswer
 

Tant qu'on a pas testé, on peut pas savoir... comme dirait Trump :D


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2352942
citation
Posté le 30-04-2020 à 06:58:12  profilanswer
 

:jap:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  Boot sector, coder un petit jeu ?

 

Sujets relatifs
Java Spring Boot - oauthaide Spring boot /jquery /api
Boot uefi pxe syslinuxUboot - end adress not on sector boundary
Conseil techno visualisation/modif BDD via du web[recherche]Modif d'un logiciel de démonstration d'un périphérique usb
Compter titres dans BDD (sauf celui d'article en cours de modif.)Modif couleur cellule active Excel
modif extention yes popupsExecuter sur une Branche des modif en VBScript Catia
Plus de sujets relatifs à : Boot sector, coder un petit jeu ?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR