Win3x.Org

Windows & DOS Community

Snake 8088 [en]

Répondre   Page 1 sur 2  [ 17 messages ]
Aller sur la page 1 2 »
Auteur Message
Deksor
Sujet du message : Snake 8088 [en]
Publié : 10 févr. 2020 02:20
Modérateur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 4957
Inscription : 23 mai 2011 13:33
PC Rétro : 486DX 33 8mo SB Pro 2, P2 450 128mo Voodoo 2 SLI
 
Snake8088 (nom provisoire)
MS-DOS

[en] Hello everyone, here's the little personal project I'm working on at the moment to learn 16 bits x86 assembly : a "Snake" game for 8088 ! I don't think I have to tell you how to play it :D. At the moment, its control keys are the arrow keys to move, and escape to quit the game.

Done
  • The "bare" game engine (display the snake*, being able to control it, to make it grow ...)
  • Support of VGA "13h" mode
  • Support of the CGA Plantronics Colorplus graphic mode
  • The game runs at the same speed no matter which system you use**
To do
  • A configuration menu
  • A title screen
  • Obstacles to avoid
  • Support for other video cards (Tandy Graphics Adapter, maybe EGA)
  • Add sound effects and music
  • Last minute adjustments (snake's speed, maximum size, colors, etc)
* Displaying the snake depends of the graphic mode, currently only VGA and CGA Plantronics Colorplus are functional.
** For now, this causes a bug with DOS that makes the clock to run much faster than usual (nearly four times faster).

Please note that I'm still a beginner with assembly, if you see horrible mistakes, please be comprehensive :approve:. Same with Github, I'm struggling a bit sometimes ^^. However any hint to improve the code is welcome :D.

To assemble the project, please use Borland Turbo Assembler 2.02 available here.

[fr] Bonjour à tous, je vous présente mon petit projet perso sur lequel je travaille en ce moment pour apprendre l'assemblage x86 16 bits : un jeu "Snake" pour 8088 ! Je pense que je n'ai pas besoin de vous expliquer comment jouer :D. Actuellement, ses touches sont les flèches pour se diriger et échap pour quitter le jeu.

Ce qui est fait
  • Le moteur "basique" du jeu (afficher le serpent*, pouvoir le contrôler, le faire grandir ...)
  • Le support du mode "13h" du VGA
  • Le support du mode graphique CGA Plantronics Colorplus
  • Le jeu va à la même vitesse peu importe la configuration **
Ce qu'il reste à faire
  • Un menu de configuration
  • Un écran titre
  • Des obstacles à éviter
  • Le support d'autres cartes vidéo (Tandy Graphics Adapter, peut-être de l'EGA)
  • Rajouter peut-être des bruitages et de la musique
  • Quelques ajustements de dernière minute (vitesse du serpent, taille maximale et taille de départ, couleurs, etc)
* L'affichage dépend du mode graphique, pour l'instant seul le VGA et le mode CGA Plantronics Colorplus sont fonctionnels.
** Pour l'instant, cela induit un bug avec DOS qui fait que l'horloge du système va avancer beaucoup plus vite que la normale (presque quatre fois plus vite).

Sachez cependant que je suis encore débutant avec l'assemblage, si vous voyez des horreurs, soyez un peu indulgent s'il-vous plaît :approve: . De même avec Github, j'ai parfois encore un peu de mal ^^. Néanmoins, les conseils pour améliorer le code sont les bienvenus :D.

Pour assembler le projet, utilisez Borland Turbo Assembler 2.02 disponible ici.

Screenshot (Capture d'écran)
Alpha 0.1 Mode Plantronics Colorplus

Download (Téléchargement)
Le projet sur Github

_________________

Laptop hater


Haut
Profil Citer
Joet BERNARD
Sujet du message : Re: Snake 8088 [en]
Publié : 10 févr. 2020 06:58
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 1339
Inscription : 19 mars 2016 20:33
PC Rétro : Pentium 4 1,5 GHz, 512 Mo de RAM, FX 5200
 
Un système de vie :mrgreen:
Plusieurs fruit différents (couleurs de pixels différents comme jaune pour une banane par exemple) qui peuvent disparaître au bout d'un moment
Un système de point (manger une pomme +1 et une banane +2 par exemple)
Et pourquoi pas un système de temps limite pour manger un fruit :mrred: réinitialisé bien sûr après avoir avalé un fruit :mrblue:

_________________

Accueil de mon Index de sites
WINJOY hors-ligne (actuellement en version (4) "Alpha")
Accueil en ligne de WINJOY (actuellement en version (5) "Beta")
Ma collection au complet


Haut
Profil Citer
Deksor
Sujet du message : Re: Snake 8088 [en]
Publié : 10 févr. 2020 09:41
Modérateur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 4957
Inscription : 23 mai 2011 13:33
PC Rétro : 486DX 33 8mo SB Pro 2, P2 450 128mo Voodoo 2 SLI
 
N'oublies pas que je suis limité à 16 couleurs dans les modes CGA, et qu'il y a déjà une couleur pour le fond, une couleur pour le serpent, qu'il y en aura une pour les murs ... Avec une pastille on a déjà 1/4 des couleurs qui sont prises ^^
C'est pas impossible à faire mais il y a quand même une limite.

Les points c'est prévu (dans le code tu verras qu'il y a une variable "score" ^^).

Le temps limite pour manger le fruit c'est faisable mais ça pourrait potentiellement demander beaucoup de temps CPU et ça sous-entend de faire un tableau contenant tous les fruits ^^ (il faut stocker la position du fruit, le temps restant et ensuite à chaque boucle, décrémenter le compteur de chaque fruit dans la liste et s'il vaut zéro, le supprimer. Pour avoir fait quelque-chose de similaire, je peux dire que le 8088 en prends un coup ^^)

_________________

Laptop hater


Haut
Profil Citer
Joet BERNARD
Sujet du message : Re: Snake 8088 [en]
Publié : 10 févr. 2020 10:32
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 1339
Inscription : 19 mars 2016 20:33
PC Rétro : Pentium 4 1,5 GHz, 512 Mo de RAM, FX 5200
 
Je propose pas non plus d'y incorporer tous les fruits, déja 5 je trouve que cest très bien, et la palette CGA sera pas entièrement utilisée :D
La plupart des Snake que j'ai hjoué n'avais que des pommes... J'y ai joué sur un peu tout, comme sur un Nokia 2680 :mrred: :mrred: :mrred:
D'ailleurs tout ce que j'ai dis précedement n'est qu'un mix de mes différentes expériences.
Pour l'instant je voit pas de code mais je suis impatient de pouvoir l'essayer avec PCem :mrblue: :mrblue:

Et peut être en virant les couleurs avoir un support MDA mais la ca va annuler l'idée de plusieurs fruits :? :?

_________________

Accueil de mon Index de sites
WINJOY hors-ligne (actuellement en version (4) "Alpha")
Accueil en ligne de WINJOY (actuellement en version (5) "Beta")
Ma collection au complet


Haut
Profil Citer
Deksor
Sujet du message : Re: Snake 8088 [en]
Publié : 10 févr. 2020 11:00
Modérateur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 4957
Inscription : 23 mai 2011 13:33
PC Rétro : 486DX 33 8mo SB Pro 2, P2 450 128mo Voodoo 2 SLI
 
Il faut aller dans la branche dev sur GitHub.
Je ne compte pas supporter le mode MDA pour la simple raison que ce n'est à l'origine qu'un mode texte. Pour adresser des pixels, il faut une carte hercules (ou un clone). Et le manque de couleurs compromet le fonctionnement du programme. (Il faudrait que j'en revienne à stocker l'emplacement de tout dans la RAM et à chaque cycle vérifier les collisions de tout, ce qui est beaucoup plus lent.)

_________________

Laptop hater


Haut
Profil Citer
Joet BERNARD
Sujet du message : Re: Snake 8088 [en]
Publié : 10 févr. 2020 15:56
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 1339
Inscription : 19 mars 2016 20:33
PC Rétro : Pentium 4 1,5 GHz, 512 Mo de RAM, FX 5200
 
J'ai un peu galéré a installé Borland TP 2.02 sous PCem (j'ai du relancer l'installation plusieurs fois, 1/ le programme ne peu pas s'installer avec 128ko de RAM -> il lui était impossible d'utiliser UNZIP... 2/ l'installation a dû planter au niveau de TLINK et j'ai mis au moins 15min a me décider a réinstaller BTP, enfin, tout MS-DOS et BTP après... :? ) mais j'ai réussi à compiler SNAKE :D
Il fonctionne bien et est très réactif quelque soit la configuration que j'ai mis dans PCem (avec bien sûr une carte VGA) : 486 DX4 75 avec 16Mo de RAM (bien au delà du minimum je sais :lol: ) puis 8088 4,77 et 128 ko de RAM.
J'ai aussi essayé de manipuler la carte graphique (EGA, CGA et j'ai aussi essayé MDA :D ) sans succès évidemment...
Ce que j'ai pu remarquer c'est que les fruits ne font qu'un pixel sur un pixel et que si je suis un seul pixel au dessus bah je peux pas prendre le fruit, surtout qu'il est assez rapide ce serpent quand même !! (Malgré avoir maltraité la config, aucun changement...)

J'ai même essayé de ralentir la machine avec AT-SLOW mais là j'ai pas eu le temps de comprendre son fonctionnement :| je devais aller en cours
Et puis je comprends maintenant (après avoir lu le readme) pourquoi il semblait bloqué sur une phrase : c'est qu'il a été testé que sur un PC-AT en 286 minimum et mettrais apparemment plus d'une minute a calibrer la vitesse...

_________________

Accueil de mon Index de sites
WINJOY hors-ligne (actuellement en version (4) "Alpha")
Accueil en ligne de WINJOY (actuellement en version (5) "Beta")
Ma collection au complet


Haut
Profil Citer
Deksor
Sujet du message : Re: Snake 8088 [en]
Publié : 10 févr. 2020 16:34
Modérateur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 4957
Inscription : 23 mai 2011 13:33
PC Rétro : 486DX 33 8mo SB Pro 2, P2 450 128mo Voodoo 2 SLI
 
AT-Slow ne fonctionnera pas.
Ce que j'ai fait en fait : il y a une "horloge" dans les pc qui est rafraîchie tous les 18,2Hz. Moi je l'ai modifiée pour aller à 60Hz environ. Donc, à chaque "tick" de l'horloge, soit 60 fois par seconde, mon programme fais l'affichage, la lecture du clavier, etc.

Cela veut dire que si tu veux ralentir le jeu, sauf à avoir un pc extrêmement lent (perso j'ai essayé dans dosbox, pour avoir un vrai ralentissement, il a fallu que je descende à ... 3cycles par seconde :lol: ) il faut s'y prendre autrement.
Soit tu peux changer la fréquence de l'horloge, soit tu peux faire en sorte que le déclanchement ne se produit qu'une fois sur deux (le serpent sera alors 2x plus lent).

Je te dirais quelle valeur il faut changer pour changer la vitesse du jeu quand je serais rentré chez moi.

Edit : vas voir à la ligne 213, sous le commentaire "19886 = 60hz",
Vois-tu "mov bx, 4daeh" ?
Déjà 19886 = 4dae en hexa. Pourquoi cette valeur ?
Si l'on se fie à la doc ici : http://lacl.univ-paris12.fr/cegielski/bios/ch8.pdf (surtout la page 10) l'horloge fonctionne ainsi : il y a une fréquence de base de 1.193MHz, et ce qui est dans BX, c'est combien de fois on la divise. 1.193MHz / 19886 ~= 60Hz :D
Si tu veux un snake plus lent, il faudra augmenter ce nombre. (J'aurais dû en faire une constante comme les autres, je corrigerai ça prochainement certainement).

_________________

Laptop hater


Haut
Profil Citer
Joet BERNARD
Sujet du message : Re: Snake 8088 [en]
Publié : 10 févr. 2020 17:35
Membre inscrit
Avatar de l’utilisateur
Hors-ligne
 
Messages : 1339
Inscription : 19 mars 2016 20:33
PC Rétro : Pentium 4 1,5 GHz, 512 Mo de RAM, FX 5200
 
On peut dire que l'affichage "s'actualise" 60 fois par seconde c'est ça ? Donc oui fait augmenter cette valeur pour avoir un jeu plus lent et donc plus facile a jouer avec des cibles si petites
Je vais essayer :D
Convertir un valeur décimale en hexa est un jeux d'enfant car 1/ c'est ce que fait en science de l'ingénieur au lycée (presque) en ce moment 2/ ma calculatrice peu très bien faite cette conversion :D

Essaye la valeur 39766 (9b56) pour SNAKE, c'est a peu près la moitié que la valeur par défaut pour avoir 30 Hz
Plus précisément c'est ta valeur - 3 (pour se rapproche le plus possible de 60 Hz) puis x 2 (pour trouver a peu près 30 Hz). Le peu que j'ai testé avec DOSBox sur Android (par très pratique mais que ça sous la main a cette heure ci) ça a l'air tellement plus jouable !!! J'ai battu mon score de tout à l'heure sur PC avec la valeur par défaut :lol:

Dernière modification par Joet BERNARD le 10 févr. 2020 19:28, modifié 1 fois.

_________________

Accueil de mon Index de sites
WINJOY hors-ligne (actuellement en version (4) "Alpha")
Accueil en ligne de WINJOY (actuellement en version (5) "Beta")
Ma collection au complet


Haut
Profil Citer
Deksor
Sujet du message : Re: Snake 8088 [en]
Publié : 10 févr. 2020 19:26
Modérateur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 4957
Inscription : 23 mai 2011 13:33
PC Rétro : 486DX 33 8mo SB Pro 2, P2 450 128mo Voodoo 2 SLI
 
D'ailleurs la manipulation de cette horloge est la raison même du fait que l'horloge de DOS déraille après, car DOS s'en sert aussi pour calculer l'heure ^^
Faudra que je corrige l'heure quand le programme est quitté, mais en attendant c'est pas un gros soucis.

J'aurais pu aussi me baser sur le taux de rafraîchissement de l'écran, sauf que le VGA en mode 13h vas à 70Hz, tandis que le CGA vas à 60Hz. En gros mon jeu aurait eu le même problème que les jeux en version PAL et NTSC à l'époque, sauf que là c'est sur la même machine exactement :lol:.

_________________

Laptop hater


Haut
Profil Citer
Deksor
Sujet du message : Re: Snake 8088 [en]
Publié : 11 févr. 2020 00:26
Modérateur
Avatar de l’utilisateur
Hors-ligne
 
Messages : 4957
Inscription : 23 mai 2011 13:33
PC Rétro : 486DX 33 8mo SB Pro 2, P2 450 128mo Voodoo 2 SLI
 
Mise à jour !

J'ai réussi à faire supporter le mode Plantronics Colorplus ! :D
Pour ceux qui voudraient l'utiliser actuellement, il faut aller au tout début du programme, peu après "main proc near", il y a normalement
mov al, VGA_MODE
mov videoMode, al
À la place, mettez
mov al, PLANTRONICS_MODE
mov videoMode, al
et c'est tout :D

J'ai aussi ralenti le serpent, mais pas exactement à 30Hz. Je l'ai ralenti à 36.4Hz. Si vous comptez bien vous aurez remarqué qu'il s'agit là de la fréquence de DOS doublée :P

Ça devrait simplifier les calculs à la fin du programme pour remettre le bon temps dans l'horloge de DOS.

_________________

Laptop hater


Haut
Profil Citer
Afficher : Trier par : Ordre :
Répondre   Page 1 sur 2  [ 17 messages ]
Revenir à « Projets en cours » | Aller sur la page 1 2 »
Aller :