Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

assembly and sound

marie1nomarie1no Posts: 2Member
Hi!

Do somebody have a link for some codes so I can make music in assebley?

«1

Comments

  • jeffleydajeffleyda Posts: 390Member
    : Hi!
    :
    : Do somebody have a link for some codes so I can make music in assebley?
    :
    :

    What operating system?
    What hardware?
    Do you want to just play music on something like a soundblaster, or actually MAKE music like with a midi editor?

    Assembly is a very detail oriented language. Your questions need to be likewise.


    (shameless self plug)
    Here's links to 2 .wav players that work in DOS:
    http://www.programmersheaven.com/search/download.asp?FileID=30034
    http://www.programmersheaven.com/search/download.asp?FileID=23237

    -jeff!
  • marie1nomarie1no Posts: 2Member
    : : Hi!
    : :
    : : Do somebody have a link for some codes so I can make music in assebley?
    : :
    : :
    :
    : What operating system?
    : What hardware?
    : Do you want to just play music on something like a soundblaster, or actually MAKE music like with a midi editor?
    :
    : Assembly is a very detail oriented language. Your questions need to be likewise.
    :
    :
    : (shameless self plug)
    : Here's links to 2 .wav players that work in DOS:
    : http://www.programmersheaven.com/search/download.asp?FileID=30034
    : http://www.programmersheaven.com/search/download.asp?FileID=23237
    :
    : -jeff!
    :
    Hi!

    Thanks a lot for replying, I'll try to make it clearer. I just got a home-exame at school, where the teacher want us to get the computer to play an easy song. For that I need some notes (A, C, E osv) like playing a gitar? I know this must sound very crazy but I realy need help.
    We are going to make it on a boot-disket, the computer have intel-cpu and the os is XP(but do the os mather?)
    I'll also admitt that I'm verry new to assembly so please don't tell me that it's to dificult.


  • CroWCroW Posts: 348Member
    : : : Hi!
    : : :
    : : : Do somebody have a link for some codes so I can make music in assebley?
    : : :
    : : :
    : :
    : : What operating system?
    : : What hardware?
    : : Do you want to just play music on something like a soundblaster, or actually MAKE music like with a midi editor?
    : :
    : : Assembly is a very detail oriented language. Your questions need to be likewise.
    : :
    : :
    : : (shameless self plug)
    : : Here's links to 2 .wav players that work in DOS:
    : : http://www.programmersheaven.com/search/download.asp?FileID=30034
    : : http://www.programmersheaven.com/search/download.asp?FileID=23237
    : :
    : : -jeff!
    : :
    : Hi!
    :
    : Thanks a lot for replying, I'll try to make it clearer. I just got a home-exame at school, where the teacher want us to get the computer to play an easy song. For that I need some notes (A, C, E osv) like playing a gitar? I know this must sound very crazy but I realy need help.
    : We are going to make it on a boot-disket, the computer have intel-cpu and the os is XP(but do the os mather?)
    : I'll also admitt that I'm verry new to assembly so please don't tell me that it's to dificult.
    :
    :
    :

    ok,do i understand it right?you want create a disk which plays a song when booting from it?

    a good oldschool way to play simple sounds is the adlib,which should be supported by most today cards(is this still true?hard to test this under todays XP-enviroments).this chip let you create a ton by specifing frequency,length,vibrato and few other sound-parameters to make the sound instruments-like.you can setup a guitar-like sound,too.

    i assume you have some basic assembly-knowledge,this is surely not that hard to do,but you need some assembly-practice to code.i suggest you try to write this code under win9x and not XP.XP will not allow you to control the adlib directly.search this site or the web for adlib,there should be good descriptions for this chip or send me a private message

    when you played your first notes successfully you can try to change your code to a bootable version.


  • pmcastillopmcastillo Posts: 140Member
    : : : : Hi!
    : : : :
    : : : : Do somebody have a link for some codes so I can make music in assebley?
    : : : :
    : : : :
    : : :
    : : : What operating system?
    : : : What hardware?
    : : : Do you want to just play music on something like a soundblaster, or actually MAKE music like with a midi editor?
    : : :
    : : : Assembly is a very detail oriented language. Your questions need to be likewise.
    : : :
    : : :
    : : : (shameless self plug)
    : : : Here's links to 2 .wav players that work in DOS:
    : : : http://www.programmersheaven.com/search/download.asp?FileID=30034
    : : : http://www.programmersheaven.com/search/download.asp?FileID=23237
    : : :
    : : : -jeff!
    : : :
    : : Hi!
    : :
    : : Thanks a lot for replying, I'll try to make it clearer. I just got a home-exame at school, where the teacher want us to get the computer to play an easy song. For that I need some notes (A, C, E osv) like playing a gitar? I know this must sound very crazy but I realy need help.
    : : We are going to make it on a boot-disket, the computer have intel-cpu and the os is XP(but do the os mather?)
    : : I'll also admitt that I'm verry new to assembly so please don't tell me that it's to dificult.
    : :
    : :
    : :
    :
    : ok,do i understand it right?you want create a disk which plays a song when booting from it?
    :
    : a good oldschool way to play simple sounds is the adlib,which should be supported by most today cards(is this still true?hard to test this under todays XP-enviroments).this chip let you create a ton by specifing frequency,length,vibrato and few other sound-parameters to make the sound instruments-like.you can setup a guitar-like sound,too.
    :
    : i assume you have some basic assembly-knowledge,this is surely not that hard to do,but you need some assembly-practice to code.i suggest you try to write this code under win9x and not XP.XP will not allow you to control the adlib directly.search this site or the web for adlib,there should be good descriptions for this chip or send me a private message
    :
    : when you played your first notes successfully you can try to change your code to a bootable version.
    :
    :
    :
    Ummmm... I'm a noob... What's the syntax? or the INT? or the sub-function? Or a link to tutorial site?
  • shaolin007shaolin007 Posts: 1,018Member
    [green]
    Might be an easier task to do it with the PC speaker being a novice even though the PC speaker is inferior now days.

    http://fly.cc.fer.hr/GDM/articles/sndmus/speaker1.html

    [/green]


  • pmcastillopmcastillo Posts: 140Member
    : [green]
    : Might be an easier task to do it with the PC speaker being a novice even though the PC speaker is inferior now days.
    :
    : http://fly.cc.fer.hr/GDM/articles/sndmus/speaker1.html
    :
    : [/green]
    :
    :
    :
    Ummmm.... I'm using TASM 2.0... Can't understand, especially the "OUT" thing...
  • shaolin007shaolin007 Posts: 1,018Member
    : : [green]
    : : Might be an easier task to do it with the PC speaker being a novice even though the PC speaker is inferior now days.
    : :
    : : http://fly.cc.fer.hr/GDM/articles/sndmus/speaker1.html
    : :
    : : [/green]
    : :
    : :
    : :
    : Ummmm.... I'm using TASM 2.0... Can't understand, especially the "OUT" thing...
    :

    [green]
    Are talking about the instructions 'out' and 'in' for port access?
    [/green]

  • pmcastillopmcastillo Posts: 140Member
    : : : [green]
    : : : Might be an easier task to do it with the PC speaker being a novice even though the PC speaker is inferior now days.
    : : :
    : : : http://fly.cc.fer.hr/GDM/articles/sndmus/speaker1.html
    : : :
    : : : [/green]
    : : :
    : : :
    : : :
    : : Ummmm.... I'm using TASM 2.0... Can't understand, especially the "OUT" thing...
    : :
    :
    : [green]
    : Are talking about the instructions 'out' and 'in' for port access?
    : [/green]
    :
    :
    YES! YES! YES! =) That's what I pertaining to! Here's the story:

    I'm new to Assembly Language. Then our teacher gave us an assignment to make a program that produce sounds using TASM. All I could understand for today is the "INT xxh" and "MOV AH, xxh" thing (or some like STOSB). Hope you could help me...
  • shaolin007shaolin007 Posts: 1,018Member
    : : : : [green]
    : : : : Might be an easier task to do it with the PC speaker being a novice even though the PC speaker is inferior now days.
    : : : :
    : : : : http://fly.cc.fer.hr/GDM/articles/sndmus/speaker1.html
    : : : :
    : : : : [/green]
    : : : :
    : : : :
    : : : :
    : : : Ummmm.... I'm using TASM 2.0... Can't understand, especially the "OUT" thing...
    : : :
    : :
    : : [green]
    : : Are talking about the instructions 'out' and 'in' for port access?
    : : [/green]
    : :
    : :
    : YES! YES! YES! =) That's what I pertaining to! Here's the story:
    :
    : I'm new to Assembly Language. Then our teacher gave us an assignment to make a program that produce sounds using TASM. All I could understand for today is the "INT xxh" and "MOV AH, xxh" thing (or some like STOSB). Hope you could help me...
    :

    [green]
    Those instruction aren't difficult to learn. They both can either take a immediate operand of size byte or for ports greater than 255 you must use the dx register.

    [code]
    in = in from port
    out= out to port

    mov dx, 1234
    mov al, 32
    out dx, al ;send the number 32 to port 1234

    or

    mov al, 32
    out 42, al ;send the number 32 to port 42

    mov dx, 1234
    in al, dx ;copy byte in port 1234 to al

    or

    in al, 42 ;copy byte in port 42 to al
    [/code]

    What I suggest you do is at least download the instruction set reference from intel. That will give you a full explanation on how to use the instructions.
    [/green]

  • pmcastillopmcastillo Posts: 140Member
    [b][red]This message was edited by pmcastillo at 2005-10-12 5:37:21[/red][/b][hr]
    I DID IT! I DID IT! I DID IT! I tried to find some sample source code from the Internet and I found this : I've found it from : http://www.talkaboutprogramming.com/group/alt.lang.asm/messages/73981.html

    [code]
    ;
    ; PIANO.ASM [ - For DOS - ]
    ; Simple PC Speaker Piano Keyboard
    ; Freeware from Evenbit
    ;
    ;
    .model tiny
    .code
    org 100h

    main: jmp start
    ;
    stor dw 0 ;our memory location storage
    ;
    ; Turn the cursor off.
    ;
    start:
    call curs_off ;go turn off cursor
    ;
    ; Get a keypress from the user, and act accordingly.
    ; (We're checking U.S. keyboard scan codes here.)
    ;
    get_key:
    mov ah,0 ;function 0 - wait for keypress
    int 16h ;call ROM BIOS keyboard services
    cmp ah,1 ;ESC key pressed?
    je exit ;yes, so go exit
    cmp ah,02h
    je tone_1
    cmp ah,03h
    je tone_2
    cmp ah,04h
    je tone_3
    cmp ah,05h
    je tone_4
    cmp ah,06h
    je tone_5
    cmp ah,07h
    je tone_6
    cmp ah,08h
    je tone_7
    cmp ah,09h
    je tone_8
    cmp ah,0ah
    je tone_9
    cmp ah,0bh
    je tone_0
    ;
    jmp get_key ;go get another keypress
    ;
    exit:
    call curs_on ;go turn cursor on
    int 20h ;exit to DOS
    ;
    tone_1:
    mov ax, 272
    mov stor, ax
    call sounder ;go generate the tone
    jmp get_key ;go get another keypress
    tone_2:
    mov ax, 294
    mov stor, ax
    call sounder ;go generate the tone
    jmp get_key ;go get another keypress
    tone_3:
    mov ax, 314
    mov stor, ax
    call sounder ;go generate the tone
    jmp get_key ;go get another keypress
    tone_4:
    mov ax, 330
    mov stor, ax
    call sounder ;go generate the tone
    jmp get_key ;go get another keypress
    tone_5:
    mov ax, 350
    mov stor, ax
    call sounder ;go generate the tone
    jmp get_key ;go get another keypress
    tone_6:
    mov ax, 370
    mov stor, ax
    call sounder ;go generate the tone
    jmp get_key ;go get another keypress
    tone_7:
    mov ax, 392
    mov stor, ax
    call sounder ;go generate the tone
    jmp get_key ;go get another keypress
    tone_8:
    mov ax, 419
    mov stor, ax
    call sounder ;go generate the tone
    jmp get_key ;go get another keypress
    tone_9:
    mov ax, 440
    mov stor, ax
    call sounder ;go generate the tone
    jmp get_key ;go get another keypress
    tone_0:
    mov ax, 475
    mov stor, ax
    call sounder ;go generate the tone
    jmp get_key ;go get another keypress



    ;
    ;****************************************
    ; Our sub-routines start here.
    ;****************************************
    ;
    ; Turn cursor off.
    ;
    curs_off:
    mov ch,10h ;set bits to turn cursor off
    mov ah,1 ;function 1 - cursor control
    int 10h ;call ROM BIOS video services
    ret ;return to caller
    ;
    ; Turn cursor on.
    ;
    curs_on:
    mov cx,0506h ;set bits to turn cursor on
    mov ah,1 ;function 1 - cursor control
    int 10h ;call ROM BIOS video services
    ret ;return to caller
    ;
    ; Generate sound through the PC speaker.
    ;
    [red]
    sounder:
    mov al,10110110b ;load control word
    out 43h,al ;send it
    mov ax,stor ;tone frequency
    out 42h,al ;send LSB
    mov al,ah ;move MSB to AL
    out 42h,al ;save it
    in al,61h ;get port 61 state
    or al,00000011b ;turn on speaker
    out 61h,al ;speaker on now
    call delay ;go pause a little bit
    and al,11111100b ;clear speaker enable
    out 61h,al ;speaker off now
    call clr_keyb ;go clear the keyboard buffer
    ret ;return to caller
    [/red]
    delay:
    mov ah,00h ;function 0 - get system timer tick
    int 01Ah ;call ROM BIOS time-of-day services
    add dx,4 ;add our delay value to DX
    mov bx,dx ;store result in BX
    pozz:
    int 01Ah ;call ROM BIOS time-of-day services
    cmp dx,bx ;has the delay duration passed?
    jl pozz ;no, so go check again
    ret ;return to caller
    ;
    ; Clear the keyboard buffer.
    ;
    clr_keyb:
    push es ;preserve ES
    push di ;preserve DI
    mov ax,40h ;BIOS segment in AX
    mov es,ax ;transfer to ES
    mov ax,1Ah ;keyboard head pointer in AX
    mov di,ax ;transfer to DI
    mov ax,1Eh ;keyboard buffer start in AX
    mov es: word ptr [di],ax ;transfer to head pointer
    inc di ;bump pointer to...
    inc di ;...keyboard tail pointer
    mov es: word ptr [di],ax ;transfer to tail pointer
    pop di ;restore DI
    pop es ;restore ES
    ret ;return to caller
    ;
    end main
    end
    [/code]

    When you run the program, you'll just press (0-9) and the sound will produce, while ESC exits the program.


    Here I learn something: (I'm referring to the RED code)

    1.) OUT is putting something to the port while IN is getting something to the port.

    2.) (10110110b = 182 = B6h) was sent to port 43h. According to http://fly.cc.fer.hr/GDM/articles/sndmus/speaker1.html, Port 43h is a System Timer 2, is used to control sound generation. And the number that was inputed to it is countdown value (is it the same with frequency?).

    3.) Then the STOR was sent to AX (What will be put to AH and AL?).

    4.) Then "something" (because I don't know what went to AL) was sent to Port 42h. It said Port 42h is used to set the LOW and HIGH byte (What is it? Is it the peaks and bottoms of the frequency?). Twice... (Can't understand this thing, will the second value OVERWRITE the first value?)

    5.) What are these things:

    [code]
    or al,00000011b ;turn on speaker
    and al,11111100b ;clear speaker enable
    [/code]

    What's the meaning or OR and AND commands?

    QUESTIONS: I summarized all here:

    1.) Is countdown value the same with frequency?

    2.) If I put 475 to AX, what will be put in AH and AL?

    3.) Is the LOW and HIGH byte the peaks and bottoms of the frequency?

    4.) If I sent two values in a port, will the second value OVERWRITE the first one? (Co'z that's my understanding, AX = VALUE1 then AX = VALUE 2, therefore AX is VALUE2)

    5.) What's the meaning or OR and AND commands?

    6.) I tried to find some manuals in Intel Processor in http://www.intel.com/ but all I could see is Processors and it's specs... Where can I get an Intel Documentation?
«1
Sign In or Register to comment.