IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

Tetris help assembleur x86 help


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #41
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Bonjour Mat.

    Citation Envoyé par Mat.M Voir le message
    c'est un bon exercice et je trouve que la vision des intervenants est trop compliquée ( certains nous parlent de procrastination.. ) ça confirme ce que j'ai toujours pensé en France on aime bien faire compliqué quand on peut faire simple...
    Je ne vois pas à quoi tu fais allusion par "vision des intervenants trop compliquée" des citations ça serait sympa

    ceci dit faire un tetris en assembleur c'est certain c'est pas facile même en C je me suis déjà cassé les dents là-dessus.
    Et ça a donné quoi ?

    Ensuite tu peux dépasser le VGA en 320*200 en permutant en mode VESA mais je ne sais pas s'il est toujours bien supporté par les cartes récentes..à confirmer
    le standard VESA est toujours supporté, par contre il va faire son programme en mode réel sous DosBox, donc ça implique une gestion chiante de l’affichage
    pour un résultat qui ne se verra peut-être pas (pour l'instant ses blocs sont juste des carrés de 5x5 pixels)

    Mais ça c'est en dernier lieu le plus important c'est le coté conception et algorithme.
    je pense que c'est ce qu'on lui dit depuis pas mal de temps

    Sinon une astuce pour calculer l'offset de mémoire écran qui consiste à multiplier par 320 ou bien la résolution en X plus la colonne c'est de faire un décalage à droite avec ROR ou autre instruction de décalage...
    Euh... comment dire... Non.
    sur 8086 ok la multiplication bouffait un paquet de cycles, mais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mov ax,Y
    mov ax,bx
    shl ax, 6 ; Y*64
    shl bx,8 ; Y*256
    add ax,bx ; ax=Y*320
    n'est pas mieux qu'un bon "mul"

    sinon oui comme l'écrit Forthman on n'utilise pas de coordonnées en dur...
    ça c'était évident, j'ai toujours raison

  2. #42
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Sans vouloir vous offensez , vous êtes même pas sur que l'auteur du topic revient ,c'est assez courant des personnes qui pose des questions et qui revienne pas
    Si c'est la prog de jeux vidéo qui vous intéresse , on peut très bien organiser entre membre un petit concours de jeu fait en assembleur l'avantage sur ms-dos c'est que y'a moins de contrainte technique , ou pour les puristes de faire des jeux sur des machines dédié.
    J'ai fait 2 petit jeu en assembleur en 2 jours :

    -un sur la Super Nintendo :



    - et un autre sur Neo Geo (qui est a la base un system Arcade) du bon motorola 68000 ^^ :

  3. #43
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Forthman Voir le message
    ça c'était évident, j'ai toujours raison
    mais !!!

    Citation Envoyé par Kannagi Voir le message
    Sans vouloir vous offensez , vous êtes même pas sur que l'auteur du topic revient ,c'est assez courant des personnes qui pose des questions et qui revienne pas
    oui surtout l'ampleur du truc, mais bon, verre à moitié plein, bénéfice du doute toussa... et puis le fait est que ça reste intéressant ^^

    J'ai fait 2 petit jeu en assembleur en 2 jours :
    c'est juste énorme j'imagine que c'est dans le cadre de concours donc quand tu dis "2 jours" il faut comprendre "48h non stop" ? les sprites sont fournis ou il faut se les faire soi-même sur le temps de la compet' ?

  4. #44
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    C'est surtout cela qui nous inquiète : un Tétris, ça a l'air facile mais ça ne l'est pas du tout.
    je n'ai jamais écrit le contraire
    Citation Envoyé par Obsidian Voir le message

    Si tu veux multiplier (par une puissance de 2), il faut décaler vers la gauche et non vers la droite.
    c'est exact j'ai dû écrire une erreur...

  5. #45
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    c'est juste énorme j'imagine que c'est dans le cadre de concours donc quand tu dis "2 jours" il faut comprendre "48h non stop" ? les sprites sont fournis ou il faut se les faire soi-même sur le temps de la compet' ?
    Merci , on peut prendre les graphisme sur le net je que j'ai fait.
    Sinon oui il faut comprendre 48h non stop.

  6. #46
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 106
    Points
    43 106
    Par défaut
    Pour la seconde video, c'est pas double dragon ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #47
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Oui j'ai repris les sprite de double dragon pour faire un mini jeu.

  8. #48
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    @ Kannagi : pourquoi nous sentirions nous offensé ?
    Vu le délai imposé, et vu la dernière intervention de Denzi, il y a des chances qu'il ait laissé tomber en effet

    Mais comme l'a écrit BufferBob :

    Citation Envoyé par BufferBob Voir le message
    et puis le fait est que ça reste intéressant ^^
    Voilà, c'est sympa et ça ravive de souvenir plus ou moins lointains (+20 ans pour moi )

    Par contre, pour ma part, je ne suis pas intéressé par les concours, mais pourquoi pas avoir quelques sujets de réflexion
    comme ce Tetris ou d'autres types de programmes.
    Non pas pour aboutir à un programme, mais plutôt pour confronter nos idées/façons de penser... tout ça tout ça quoi

  9. #49
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par Forthman Voir le message
    @ Kannagi : pourquoi nous sentirions nous offensé ?
    Vu le délai imposé, et vu la dernière intervention de Denzi, il y a des chances qu'il ait laissé tomber en effet
    Ben parce que je dis grosso modo que vous répondez dans le vide ^^'

    Citation Envoyé par Forthman Voir le message
    Par contre, pour ma part, je ne suis pas intéressé par les concours, mais pourquoi pas avoir quelques sujets de réflexion
    comme ce Tetris ou d'autres types de programmes.
    Non pas pour aboutir à un programme, mais plutôt pour confronter nos idées/façons de penser... tout ça tout ça quoi
    Pour ma part j'ai envie de dire sur la prog de jeux vidéo l'expérience est le meilleur atout donc je pense que si quelqu'un a deja fait un tetris il répondra toujours mieux que celui qui théorise la chose

  10. #50
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    Je suis toujours là, ne vous inquiétez pas. Je ne m'y mets que maintenant car j'avais un projet de fin d'études à remettre.
    Alors : je n'ai pas avancé. la prochaine étape, c'est d'essayer de faire comme Forthman m'a dit pour dessiner les blocs car le prof ma directement dit que je faisais de la merde.

    Par contre si quelqu'un sait me dire comment Sprite fonctionne, ça m'aiderait beaucoup. Merci, car j'ai compris le fonctionnement du code de Fortman mais je n'arrive pas a l'implémenter.

  11. #51
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par denzi Voir le message
    Par contre si quelqu'un sait me dire comment Sprite fonctionne, ça m'aiderait beaucoup
    un "sprite" ce n'est ni une boisson gazeuse ni même un nom propre ici, c'est un nom commun et un mot anglais pour designer un élément récurrent de la scène rendue à l'écran
    le principe c'est que tu ne dessines pas les sprites, tu les colles directement comme des blocs rectangulaires

    en clair ça ce sont des sprites :


  12. #52
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    je sais ce que sais jarrive pas a l'ecrire comme forthman la fais c'est tous et jeme demande comment faire

  13. #53
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    y a quelqueun qui sais mexpliqué la ligne de codde suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     piece_t dw 1605, 1610, 1615, 3210 ; point down
                 dw 10, 1610, 1615, 3210   ; point right
                 dw 10, 1605, 1610, 1615   ; point up
                 dw 10, 1605, 1610, 3210   ; point left
    ou celle si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    palette db 0,0,0, 63,0,0, 0,63,0, 0,0,63, 63,63,0, 63,0,63, 0,63,63, 63,63,63, 63,31,0
    	;array met 200 waarden met standaardwaarde zwart 0
    	blockarray db 200 dup(0)
     
    	;kleurcode, 0deg kolom1,rij1,.. 90deg kolom1,rij1,.. 180deg kolom1,rij1,.. 270deg kolom1,rij1,..
    	block1 db 1,  -1,0,0,0,1,0,2,0,  0,-2,0,-1,0,0,0,1,  -1,0,0,0,1,0,2,0,  0,-2,0,-1,0,0,0,1 ;I
    	block2 db 2,  -1,0,0,0,1,0,1,1,  0,-1,0,0,-1,1,0,1,  -1,-1,-1,0,0,0,1,0,  0,-1,1,-1,0,0,0,1 ;J
    	block3 db 4,  -1,0,0,0,1,0,-1,1,  -1,-1,0,-1,0,0,0,1,  1,-1,-1,0,0,0,1,0,  0,-1,0,0,0,1,1,1 ;L
    	block4 db 5,  0,0,1,0,0,1,1,1,  0,0,1,0,0,1,1,1,  0,0,1,0,0,1,1,1,  0,0,1,0,0,1,1,1 ;O
    	block5 db 6,  0,0,1,0,-1,1,0,1,  0,-1,0,0,1,0,1,1,  0,-1,1,-1,-1,0,0,0,  -1,-1,-1,0,0,0,0,1 ;S
    	block6 db 7,  -1,0,0,0,1,0,0,1,  0,-1,0,0,1,0,0,1,  0,-1,-1,0,0,0,1,0,  0,-1,-1,0,0,0,0,1 ;T
    	block7 db 8,  -1,0,0,0,0,1,1,1,  0,-1,-1,0,0,0,-1,1,  -1,-1,0,-1,0,0,1,0,  1,-1,0,0,1,0,0,1 ;Z
    merci

  14. #54
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    db, dw, dd et dq signifient respectivement « data byte », « data word », « data double word » et « data quad word », soit des données de 1, 2, 4 ou 8 octets de long à chaque fois.

    Les valeurs que tu spécifies vont être directement déposées dans le code à l'endroit où tu les spécifies. C'est utile pour joindre des données à son programme.

    Ces données peuvent également être des chaînes de caractères. En principe, l'assembleur gère les chaînes exactement comme sed, c'est-à-dire que le premier caractère de ma chaîne définit le délimiteur. Ces délimiteurs sont traditionnellement « / » ou « " », si bien qu'on peut les écrire invariablement :

    /chaine/
    "chaine"
    … mais tous les assembleurs ne respectent plus cette syntaxe. Certains imposent les guillemets désormais.

  15. #55
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Pour les sprites, je ne partirais pas sur les formes définitives, mais sur les petits carrés de couleurs, chaque tétramino étant formé
    de 4 sprites.

    c'est d'ailleurs ce qui est proposé dans ce bout de code donné par Denzi :

    Citation Envoyé par denzi Voir le message
    y a quelqueun qui sais mexpliqué la ligne de codde suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     piece_t dw 1605, 1610, 1615, 3210 ; point down
                 dw 10, 1610, 1615, 3210   ; point right
                 dw 10, 1605, 1610, 1615   ; point up
                 dw 10, 1605, 1610, 3210   ; point left
    l'adresse piece_t pointe sur le tableau de words (mots 16 bits) qui définissent les formes
    chaque forme étant composé de 4 carrés, tu as donc 4 valeurs pour chaque "sens" de chaque pièce
    pour la pemière ligne :
    1605 = 320*5+5 ( X=5 Y=5 )
    1610 = 320*5+10 (X=10 Y=5)
    1615 = 320*5+15 (X=15 Y=5)
    3210 = 320*10+10 (X=10 Y=10)

    ce qui correspond à ton énoncé du début, soit chaque position décalé de 5 pixels

  16. #56
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    tu gererai comment la collision?

  17. #57
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    pour les collision :

    ton tableau (celui que j'ai commenté) indique des positions graphiques, le plus simple sera alors de tester les couleurs.
    choisis une couleur pour le fond "vide", teste la couleur de chaque position des carrés qui composent ta tétramino
    (ne pas oublier d'effacer la forme actuelle avant de le faire sinon tu détecteras une collision tout le temps)
    si tous les carrés "tombent" dans la couleur "vide" alors la position suivante est possible

  18. #58
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    resalut

    Es ce que quelquun voudrai bien m'aider a desssiner un block de tettris dison le L pour que je vois comment fair et le rest je vias fair seul merci beaucoup ps je dois remetre le boulot le 8 janvier :d

  19. #59
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    le code pour dessiné des formes et les appeler de maniere random
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    ;=============================================================================
    ; 32-bit Assembly LES3
    ;=============================================================================
    IDEAL
    P386
    MODEL FLAT, C
    ASSUME cs:_TEXT,ds:FLAT,es:FLAT,fs:FLAT,gs:FLAT
     
    INCLUDE "rand.inc"
     
    ;RAND_A = 1103515245
    ;RAND_C = 12345
    ;=============================================================================
    ; Uninitialized DATA
    ;=============================================================================
    UDATASEG
        rand_seed   dd 	?
    	xvalue		dd	?
    	yvalue		dd	?
     
     
    ;=============================================================================
    ; DATA
    ;=============================================================================
    DATASEG
    	;xvalue		dd	200;[xvalue]
    	;yvalue		dd	200;[xvalue]
    ;=============================================================================
    ; CODE
    ;=============================================================================
    CODESEG
     
    PROC setVideoMode
        ARG mode RETURNS eax
        mov     eax, [mode]
        int     10h
     
        ret
    ENDP setVideoMode
     
    PROC waitKey
        mov     eax, 0
        int     16h
     
        ret
    ENDP waitKey
     
    PROC CheckInput
     
    		mov ah,00h
    		int 16h				; Check input
    		cmp al,1Bh			; ESC is ingedrukt
    		jz	QuitGame
    		cmp al,71h			; Letter Q van quit is ingedrukt
    		jz 	QuitGame
    		cmp ah,50h			; Arrow down
    		jnz CheckInput
    		ret
     
    ENDP CheckInput
     
    PROC QuitGame
     
    	;call Clearscreen
        mov 	eax, 4c00h      ; AH = 4Ch - Exit To DOS
        int 	21h             ; DOS INT 21h
     
    ENDP QuitGame
     
    ;videosegment clearen, alles zwart
    PROC Clearscreen 
    	push bp
    	mov bp,sp
     
    	;ES = A000H (points to video memory segment)
    	;mag niet met letter beginnen dus 0 als start
    	mov eax,0A000h 
    	mov es,eax ;niet rechtstreeks in es schrijfbaar
     
    	mov ecx,64000 ;64000 keer doen
    	mov al,0 ;kleur wit
    	cld
    	mov di,0 ;eerste pixel
    	rep stosb ;automatisch verhogen, schrijven naar es:di
     
    	mov sp,bp
    	pop bp
    	ret 0
    ENDP Clearscreen
     
    ; Draw a rectangle at the center of the screen.
    ; W, H passed on stack.
    PROC drawBlock1
        ARG  x:dword, y:dword, co:byte				;dword = 4 bytes , word = 2 bytes, byte = 8 bits
        USES eax, ebx, ecx, edx, esi, edi
     
        ; Calculate posX
        mov     eax, 5
        neg     eax
        add     eax, [x]
        shr     eax, 1		; delen door 2
        mov     ebx, eax    ; posX is in EBX now
     
        ; Calculate posY
        mov     eax, 5
        neg     eax
        add     eax, [y]
        shr     eax, 1      ; and posY is in EAX
     
    	;eax positie Y, ebx positie X
     
        ; Calculate offset of top-left corner
        mov     edx, 320
        mul     edx         	; EAX = posY * SCREENW
        add     eax, ebx    	; EAX now contains start offset of rectangle
        add     eax, 0a0000h
    	push    eax         	; store for left vertical line drawing
     
        mov 	ecx, 5    		; 5x lijn trekken => vierkant gevuld
    	mov     edi, eax		; start of second line
    @@FillBlock:
     
        push 	ecx
    	push 	edx
     
        mov     ecx, 5    				; rect W
        mov     al, [co]	      		; color
        rep     stosb       			; draw,STOSB stores the byte in AL
     
     
    	pop 	edx 
    	add 	edi,315
    	pop		ecx
        dec     ecx
     
        jnz     @@FillBlock
     
    	sub     edi, 320
        ; done
        ret
    ENDP drawBlock1
     
    PROC rand_init
        USES    eax, ecx, edx	; eax = 32 bits; ax = 16 bits ; ah,al = 8 bits
    ; ******Random generator
        mov     ah, 02ch        ; Get system time, DH = second DL = 1/100 seconds
        int     21h				
     
        mov     ax, dx          ; Use time to generate seed in EAX
     
    	mov 	edx, 0 
    	mov 	ecx,7
    	div		cx				; Quotient = EAX, rest = EDX
     
     
        mov     [rand_seed], edx
    	mov 	[xvalue],320
    	mov 	[yvalue],160
     
     
        ret
     
    ENDP rand_init
     
     
    PROC chooseblok
     
    	call rand_init
    	mov eax , [rand_seed]
     
    	mov cl,0
    	cmp al,cl
    	je blokk1
     
    	inc cl
    	cmp al,cl
    	je blokk2
     
    	inc cl
    	cmp al,cl
    	je blokk3
     
    	inc cl
    	cmp al,cl
    	je blokk4
     
    	inc cl
    	cmp al,cl
    	je blokk5
     
    	inc cl
    	cmp al,cl
    	je blokk6
     
    	inc cl
    	cmp al,cl
    	je blokk7
    ;I-shape
    	blokk1:
        call    drawBlock1, [xvalue],[yvalue],1  		; x,y,color
    	add 	[xvalue],12
    	call    drawBlock1, [xvalue],[yvalue],1  		; x,y,color
    	add 	[xvalue],12
    	call    drawBlock1, [xvalue],[yvalue],1  		; x,y,color
    	add 	[xvalue],12
    	call    drawBlock1,[xvalue],[yvalue],1  		; x,y,color
     
    	jmp here
     
    	;j-shape
    	blokk2:
    	call    drawBlock1, [xvalue],[yvalue],2  		; x,y,color
    	add 	[xvalue],12
    	call    drawBlock1,	[xvalue],[yvalue],2  		; x,y,color
    	add 	[yvalue],12
    	call    drawBlock1, [xvalue],[yvalue],2  		; x,y,color
    	add 	[yvalue],12
    	call    drawBlock1, [xvalue],[yvalue],2  		; x,y,color
     
    	jmp here
     
    	;l-shape
    	blokk3:
    	call    drawBlock1, [xvalue],[yvalue],3  		; x,y,color
    	add 	[yvalue],12
    	call    drawBlock1, [xvalue],[yvalue],3  	; x,y,color
    	add 	[yvalue],12
    	call    drawBlock1, [xvalue],[yvalue],3  	; x,y,color
    	add 	[xvalue],12
    	call    drawBlock1, [xvalue],[yvalue],3  	; x,y,color
     
    	jmp here
     
    	;box
    	blokk4:
    	call    drawBlock1, [xvalue],[yvalue],4  	; x,y,color
    	add 	[yvalue],12
    	call    drawBlock1, [xvalue],[yvalue],4  	; x,y,color
    	add 	[xvalue],12
    	call    drawBlock1, [xvalue],[yvalue],4  	; x,y,color
    	add 	[yvalue],12
    	call    drawBlock1, [xvalue],[yvalue],4  	; x,y,color
     
    	jmp here
     
    	;z-shape
    	blokk5:
    	call    drawBlock1, [xvalue],[yvalue],5  	; x,y,color
    	add 	[xvalue],12
    	call    drawBlock1, [xvalue],[yvalue],5  	; x,y,color
    	add 	[yvalue],12
    	call    drawBlock1, [xvalue],[yvalue],5  	; x,y,color
    	add 	[xvalue],12
    	call    drawBlock1, [xvalue],[yvalue],5  	; x,y,color
     
    	jmp here
     
    	;t-shape
    	blokk6:
    	call    drawBlock1, [xvalue],[yvalue],6  	; x,y,color
    	add 	[xvalue],12
    	call    drawBlock1, [xvalue],[yvalue],6  	; x,y,color
    	add 	[xvalue],12
    	call    drawBlock1, [xvalue],[yvalue],6  	; x,y,color
    	add 	[yvalue],12
    	add 	[xvalue],-12
    	call    drawBlock1, [xvalue],[yvalue],6  	; x,y,color
     
    	jmp here
     
    	;s-shape
    	blokk7:
    	call    drawBlock1, [xvalue],[yvalue],7  	; x,y,color
    	add 	[xvalue],12
    	call    drawBlock1, [xvalue],[yvalue],7  	; x,y,color
    	add 	[yvalue],-12
    	call    drawBlock1, [xvalue],[yvalue],7  	; x,y,color
    	add 	[xvalue],12
    	call    drawBlock1, [xvalue],[yvalue],7  	; x,y,color
     
    	jmp here
     
    	here:
    	call    CheckInput
     
    ENDP chooseblok
     
    ;call chooseblok
    ; ================
    ; Start of program
    ; ================
    PROC main
        sti                 ; set The Interrupt Flag
        cld                 ; clear The Direction Flag
     
        push    ds
        pop     es
     
        call    setVideoMode, 13h
     
        mov     edi, 0a0000h
     
        ; setup colors
        mov     esi, offset pal     ; set the palette (DAC) address
        mov     ecx, 2 * 3          ; set color 0 and 1 (2 indexes in total, 2 * 3 bytes)
        mov     dx, 03c8h           ; VGA DAC set port
        mov     al, 0               ; set start color index
        out     dx, al
        inc     dx
        rep     outsb
     
    	call chooseblok
     
        ; draw
        ; add     edi, 320*10 + 160
        ; mov     [byte ptr edi], 1
     
    	;*********************************IDEE****************************************
     
     
    	; Speed of game (kijken naar aantal seconden?)
     
    	; spatie => roteren van blok
     
    	;*********************************IDEE****************************************
     
    ;*******************************************0 degrees ********************************************
        ; wait
        call     CheckInput
        call   	 setVideoMode, 3h
     
        mov 	eax, 4c00h      ; AH = 4Ch - Exit To DOS
        int 	21h             ; DOS INT 21h
    ENDP main
     
    ;=============================================================================
    ; DATA
    ;=============================================================================
    DATASEG
     
    pal db 0, 0, 0, 63, 63, 63
     
    ;=============================================================================
    ; STACK
    ;=============================================================================
    STACK 10000h
     
    END main

  20. #60
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Bon, j'espère pour toi que ce n'est pas une matière "importante"

    Ça fait 2 pages qu'on parle de tableaux pour coder la disposition des blocs qui composent les formes... et tu nous ponds du code pour chaque forme...
    En deux mois c'était un paris fou pour un débutant, en deux semaines... c'est beaucoup plus drôle
    Sachant qu'à partir du 8 Janvier on ne te reverra plus ici, j'imagine ne pas être le seul à ne pas avoir très envie de continuer.

    Le mieux qu'il te reste à faire, c'est de trouver un code de tétris tout prêt, et d'essayer de comprendre pour faire croire au prof que c'est toi qui l'a pondu
    Si tu as des questions sur des bouts de code que tu ne comprends pas, perso j'y répondrai (pas 200 lignes d'un coup hein), mais là avec le code que tu viens
    de poster, j'ai l'impression de pisser dans un violon

    Sur ces bonnes paroles : Joyeux Noël à tous !

Discussions similaires

  1. [Débutante] Analyser un code Assembleur x86 simple
    Par élodie69 dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 21/05/2008, 11h54
  2. integrer du code Assembleur (x86) dans python
    Par nephhh dans le forum Général Python
    Réponses: 2
    Dernier message: 11/02/2007, 11h50
  3. Conversion instructions assembleur X86 -> PPC
    Par bencall dans le forum Assembleur
    Réponses: 4
    Dernier message: 28/09/2006, 22h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo