• STATISTIQUES
  • Il y a eu un total de 0 membres et 31898 visiteurs sur le site dans les dernières 24h pour un total de 31 898 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Infomirmo
    Challenge présenté sous la forme de 6 niveaux de difficultés diverses et variées avec chacun plusieurs chall...
    Challenges
    [FR] Newbie Contest
    Crackme: 35, Cryptographie: 49, Hacking: 27, Javascript/Java: 17, Logique: 31, Programmation: 23, Stéganographie: 53
    Challenges
    [FR] µContest
    µContest est un site de challenges de programmation, c'est à dire qu'il propose des épreu...
    Hacking
    [FR] Forum-Webmaster
    Une communauté webmaster pour apporter / recevoir de l'aide en création de site internet. Webmaster...
    Webmaster
    [FR] Cyber-Hacker
    CH - Cyber Hacker est un jeu par navigateur de simulation de hack, programmez et envoyez vos virus et piratez les aut...
    Hacking
    [FR] InfoMirmo
    Apprentissage de l'informatique par l'intermédiaire de challenges de sécurité. Venez app...
    Hacking
    [EN] osix
    Site de challenge qui utilise un système de level on chaque épreuve doit être réussie avant d'accédÃ...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!

    €



Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[ASM] Un jeu de la vie dans le MBR
21-12-2013, 02h11 (Modification du message : 25-02-2015, 17h52 par Junky.)
Message : #1
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
[ASM] Un jeu de la vie dans le MBR
comme son nom l'indique, c'est un jeu de la vie qui tient en moins de 446 octets dans le MBR, de l'assembleur 16bits en mode réel donc, pour les geeks curieux Wink

prérequis pour faire tourner : nasm & qemu
le code en pièce jointe contient + de commentaires

les critiques/suggestions/patch/codes rivaux sont évidement les bien venus

Code ASM :

; ----------------------------------------------------
; jeu de la vie
;
; nasm -f bin gameoflife.asm
; qemu-system-i386 -hda gameoflife
;
; appuyer sur une touche lance une nouvelle génération
;
; - gruik / 2013
; ----------------------------------------------------
bits 16
org 0

%define LARGEUR 320
%define HAUTEUR 200
%define COTE    190
%define VIDEO(x,y) ((y * LARGEUR) + x)

    jmp start

    ; ----------
    ; proc line
line:
    mov al, 31
    mov cx, (COTE+1)
l1:
    mov [es:di], al
    cmp ah, 'v'
    je l2
    inc di
    jmp l3
l2:
    add di, LARGEUR
l3:
    loop l1
    ret

    ; -------------
    ; proc display
display:
    mov si, 0
    mov di, VIDEO(((LARGEUR-COTE)/2),((HAUTEUR-COTE)/2))
    mov cx, COTE
l5:
    mov bx, cx
    mov cx, COTE
    rep movsb
    sub di, COTE
    add di, LARGEUR
    mov cx, bx
    loop l5
    ret

    ; ------------
    ; proc random
random:
    rdtsc
    xor al, ah
    xor ax, si
    xor ax, cx
    ret

    ; ---------------
    ; proc neibcount
neibcount:
    push cx
    xor ax, ax
    mov dx, [ds(LARGEUR*HAUTEUR)+0)]
    mov cx, 7
l10:
    cmp cl, 2
    jg l11
    sub di, LARGEUR
    cmp dh, COTE
    jne l12
    add di, (COTE*LARGEUR)
    jmp l12
l11:
    cmp cl, 5
    jb l12
    add di, LARGEUR
    cmp dh, 1
    jne l12
    sub di, (COTE*LARGEUR)
l12:
    xor bx, bx
    inc bx
    shl bl, cl
    mov bh, bl
    and bl, (1|8|32)
    test bl, bl
    je l13
    dec di
    cmp dl, COTE
    jne l14
    add di, COTE
    jmp l14
l13:
    mov bl, bh
    and bl, (4|16|128)
    test bl, bl
    je l14
    inc di
    cmp dl, 1
    jne l14
    sub di, COTE
l14:
    mov al, [es:di]
    and al, 32
    test al, al
    je l15
    inc ah
l15:
    mov di, [ds(LARGEUR*HAUTEUR)+2)]
    loop l10
    mov al, [es:di]
    cmp ah, 2
    je l18
    cmp ah, 3
    je l16
    jmp l17
l16:    ; 3 voisines vivantes
    mov al, 32
    jmp l18
l17:    ; 0, 1 ou +3 voisines vivantes
    xor al, al
    jmp l18
l18:    ; 2 voisines vivantes
    mov [dsi], al
    pop cx
    ret

    ; -----------
    ; proc tempo
tempo:
    xor ax, ax
    int 0x1a
    mov bx, dx
l9:
    xor ax, ax
    int 0x1a
    sub dx, bx
    cmp dx, 2
    jb l9
    ret

start:
    mov ax, 0xa000
    mov es, ax
    mov ax, 0x8000
    mov ds, ax
    mov ss, ax
    xor sp, sp

    mov ax, 0x0013
    int 0x10

    ; --------------------
    ; on dessine le cadre
    ;
    mov ah, 'h' ; d'abord les lignes horizontales
    mov di, VIDEO((((LARGEUR-COTE)/2)-1),(((HAUTEUR-COTE)/2)-1))
    call line
    mov di, VIDEO((((LARGEUR-COTE)/2)-1),(((HAUTEUR-COTE)/2)+COTE))
    call line
    mov ah, 'v' ; puis les lignes verticales
    mov di, VIDEO((((LARGEUR-COTE)/2)-1),(((HAUTEUR-COTE)/2)-1))
    call line
    mov di, VIDEO((((LARGEUR-COTE)/2)+COTE),(((HAUTEUR-COTE)/2)-1))
    call line

    ; ---
    ; on initialise le premier ecran
    ;
    xor si, si
    mov cx, (COTE*COTE)
l4:
    push cx
    call random
    pop cx
    and al, 1
    shl al, 5
    mov [dsi], al
    inc si
    loop l4
    call display

    ; =====================
    ; | boucle principale |
    ; =====================
l6:
    xor si, si
    mov di, VIDEO(((LARGEUR-COTE)/2),((HAUTEUR-COTE)/2))
    xor cx, cx
    mov cl, COTE
l8:
    mov [ds(LARGEUR*HAUTEUR)+0)], cl
    mov cl, COTE
l7:
    mov [ds(LARGEUR*HAUTEUR)+1)], cl
    mov [ds(LARGEUR*HAUTEUR)+2)], di
    call neibcount
    inc si
    inc di
    mov cl, [ds(LARGEUR*HAUTEUR)+1)]
    loop l7
    add di, LARGEUR-COTE
    mov cl, [ds(LARGEUR*HAUTEUR)+0)]
    loop l8
    call display
    call tempo
    mov ax, 0x0100
    int 0x16
    jz l6
    mov ah, 0
    int 0x16
    jmp start

    times 446-($-$$) db 0
    times 64 db 0   ; partitions table
    dw 0xaa55
 


Pièces jointes
.asm   pouet.asm (Taille : 6.01 Ko / Téléchargements : 10)
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
(Nicolas Boileau, L'Art poétique)
+1 (11) -1 (1) Répondre


Messages dans ce sujet
[ASM] Un jeu de la vie dans le MBR - par gruik - 21-12-2013, 02h11

Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [C] [Win32] Injection de DLL dans un process avant son initialisation supersnail 4 397 26-03-2013, 23h27
Dernier message: fr0g

Atteindre :


Utilisateur(s) parcourant ce sujet : 5 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut