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 16-bits Assembleur Discussion :

Piano en mode réel


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Points : 0
    Points
    0
    Par défaut Piano en mode réel
    Bonjour à tous, j'aimerais faire un piano, c'est-à-dire jouer des notes d'un piano à l'aide de l'assembleur en mode réel. Voici mon code mais cela ne fonctionne pas :
    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
    bits 16      ; tell the assembler we want 16 bit code
    org 0x7C00   ; add 0x7C00 to label addresses
    portB   equ 61h         ; i/o port B
    keybd2  equ 7h          ; keyboard input, no echo
    doscall equ 21h         ; DOS interrupt
    cont_c  equ 03h         ; control-c ASCII code
     
    ;***********************
    ; main
    ;***********************
     
    main:
     
      read_key:
        mov   ah, keybd2    ; keyboard, no echo
        int   doscall
     
        mov   dl,al         ; print it
        push  ax
        mov   ah,2
        int   doscall
        pop   ax
     
        sub   al,31h        ; get number
        and   al,00000111b  ; mask off 5 bits
     
      ; get frequency for each number
        cmp   al,1d
        jnz   chk2
        mov   bx,1196h      ; c
      chk2:
        cmp   al,2d
        jnz   chk3
        mov   bx,0fach      ; d
      chk3:
        cmp   al,3d
        jnz   chk4
        mov   bx,0DF6h      ; e
      chk4:
        cmp   al,4d
        jnz   chk5
        mov   bx,0D47h      ; f
      chk5:
        cmp   al,5d
        jnz   chk6
        mov   bx,0BC1h      ; g
      chk6:
        cmp   al,6d
        jnz   chk7
        mov   bx,0A79h      ; a
      chk7:
        cmp   al,7d
        jnz   chk8
        mov   bx,953h       ; b
      chk8:
        cmp   al,8d
        jnz   chk9
        mov   bx,8CBh       ; c
      chk9:
        cmp   al,9d
        jnz   endchk
        mov   bx,7AAh       ; d
      endchk:
     
      ; put pitch in timer, turn on tone
        mov   al,10110110b  ; magic number
        out   43h,al        ; in timer
        mov   ax,bx         ; pitch
        out   42h,al        ; lsb into timer
        mov   al,ah         
        out   42h,al        ; msb into timer
        in    al,portB
        or    al,3          ; turn on speaker
        out   portB,al
     
      ; wait, then turn off speaker
        mov   cx,0fh     ; outer delay
      more2:
        push  cx
        mov   cx,0ffffh     ; delay
      more:
        loop  more
        pop   cx
        loop  more2
        in    al,portB
        and   al,11111100b  ; turn off speaker
        out   portB,al
        jmp   read_key      ; return to start   
     
    times 510-($-$$) db 0
    dw 0AA55h ; some BIOSes require this signature
    Besoin d'aide s'il vous plaît.

  2. #2
    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 136
    Points
    10 136
    Par défaut
    Ok ça ne marche pas, qu'est-ce qui ne marche pas exactement ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Points : 0
    Points
    0
    Par défaut
    je le démarre sur une machine virtuelle grace a un fichier image. Mais j'ai just un tiret en gros ça ne fait rien

  4. #4
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    Ça marchera jamais, ça n'a pas de pied.

    Visiblement c'est un code créé pour fonctionner sans système d'exploitation mais tu fais appel aux fonctions DOS donc ça ne risque pas de fonctionner. Il me semble qu'il y a des fonctions BIOS disponibles qui font ça, ou alors tu les recrées.

  5. #5
    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
    C'est la machine virtuelle qui fait que ça ne fonctionne pas.
    Elle ne doit pas gérer le port 61h qui est relié au speaker

    Bon.. en même temps tu ne perds pas grand chose car le son qui sort de ça est franchement dégueu

    EDIT: correction !
    ce n'est pas l'émulateur le fautif, mais les PC modernes qui n'ont plus de speaker relié au timer
    donc il faudrait que l'émulateur émulationne un speaker via la carte son... et ça il ne fait pas

Discussions similaires

  1. VESA - Mode réel / protégé / EMS-XMS
    Par zdra dans le forum x86 16-bits
    Réponses: 35
    Dernier message: 21/08/2010, 11h39
  2. Mode réel de nos jours
    Par tixweb dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 21/06/2007, 15h15
  3. Compilateur C 16 bits mode réel
    Par jfg31 dans le forum C
    Réponses: 10
    Dernier message: 11/03/2006, 11h40
  4. [Débutant] Segmentation mode réel / mode protégé
    Par vivid dans le forum Assembleur
    Réponses: 14
    Dernier message: 21/02/2006, 20h31
  5. [EPROM] Adressage en mode réel
    Par ruda.tom dans le forum Assembleur
    Réponses: 16
    Dernier message: 06/11/2003, 00h56

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