Boot sector, coder un petit jeu ?

Boot sector, coder un petit jeu ? - ASM - Programmation

Marsh Posté le 07-04-2020 à 22:18:41    

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
Reply

Marsh Posté le 07-04-2020 à 22:18:41   

Reply

Marsh Posté le 11-04-2020 à 14:16:53    

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)
Reply

Marsh Posté le 11-04-2020 à 20:43:51    

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

Reply

Marsh Posté le 11-04-2020 à 23:47:54    

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


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-04-2020 à 21:34:40    

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
Reply

Marsh Posté le 16-04-2020 à 00:03:46    

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 !

Reply

Marsh Posté le 16-04-2020 à 00:20:57    

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é?

Reply

Marsh Posté le 16-04-2020 à 07:48:32    

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

Reply

Marsh Posté le 16-04-2020 à 09:45:30    

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


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-04-2020 à 10:57:04    

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]

Reply

Marsh Posté le 16-04-2020 à 10:57:04   

Reply

Marsh Posté le 19-04-2020 à 11:04:47    

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

Reply

Marsh Posté le 26-04-2020 à 20:38:09    

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
 
 

Reply

Marsh Posté le 26-04-2020 à 21:09:43    

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

Reply

Marsh Posté le 27-04-2020 à 00:28:18    

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)
Reply

Marsh Posté le 27-04-2020 à 08:27:19    

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 !

Reply

Marsh Posté le 27-04-2020 à 22:52:39    

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 Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-04-2020 à 23:27:33    

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)
Reply

Marsh Posté le 27-04-2020 à 23:40:45    

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 Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 28-04-2020 à 10:23:36    

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

Reply

Marsh Posté le 28-04-2020 à 11:52:11    

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)
Reply

Marsh Posté le 28-04-2020 à 17:18:07    

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:

Reply

Marsh Posté le 29-04-2020 à 08:46:07    

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)
Reply

Marsh Posté le 29-04-2020 à 19:30:23    

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:  

Reply

Marsh Posté le 29-04-2020 à 20:20:31    

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 Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 29-04-2020 à 21:25:51    

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

Reply

Marsh Posté le 29-04-2020 à 22:30:11    

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 Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 29-04-2020 à 22:49:15    

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
 

Reply

Marsh Posté le 29-04-2020 à 22:52:47    

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 Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 30-04-2020 à 06:58:12    

:jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed