From: Rudolf Marek <MAREKR2@cs.felk.cvut.cz>
To: philippe <pvir@freesurf.fr>
Cc: Linux-assembly@vger.kernel.org
Subject: Re: sound
Date: Tue, 25 Jun 2002 10:06:40 +0200 [thread overview]
Message-ID: <af98cq$lbr$2@main.gmane.org> (raw)
In-Reply-To: <3D17944F.E391DBF4@freesurf.fr>
On Mon, 24 Jun 2002, philippe wrote:
> Date: Mon, 24 Jun 2002 23:51:11 +0200
> From: philippe <pvir@freesurf.fr>
> To: Linux-assembly@vger.kernel.org
> Subject: sound
>
> hi
> I am new on this list and my name is Philippe.
> I used to make some programs on windows but wanted to trye on linux.
> I have a problem with a small prog i had done for windows witch play
> sounds on the fm chip of a sound card.
> But when i translate it on linux, it doesn't work any more.
> It compile and link correctly(nasm), but on execution it writes:
> segmentation fault!
Maybe You have no permission to write to that ports.
Use io_perm syscall to set it.
Also this king of programming is not good choice for linux. Use kernel to
do the dirty work. You can use a "services" (ioctls) of sound driver to
produce sound. I think there is an tutorial on www.linuxassembly.org
for a sound too.
> I post you the sources at the end of this message.
>
> I had an other question:
> Where can I find bible of all the interruptions and what is the name of
> it?
It is called Ralf's Brown Inetrrupt list.
Use google.com to find it (it was on Simtelnet mirrors)
Regards
Rudolf
>
>
> Philippe
>
>
>
>
> ;************************************************
> ;* Ecriture sur SoundBlaster *
> ;*1-ecrire dans le adresse port0x388 *
> ;*2-attendre 12 cycles *
> ;*3-ecrire dans le data port0x389 *
> ;*4-attendre 84 cycles *
>
> ;compiler:
> ; nasm -f elf SBB.asm
> ; ld -s -o SBB SBB.o
>
>
> section .text ;section declaration
>
> ;we must export the entry point to the ELF
> linker or
> global _start ;loader. They conventionally recognize _start as
> their
> ;entry point. Use ld -e foo to override the
> default.
>
> _start:
>
>
> ;mettre tous les registres SB a zero
> mov edx,0x388 ;port adresse
> mov eax,0x20 ;registre sb 20
> out dx,al
> mov edx,0x389 ;data port
> mov al,7
> out dx,al
>
> mov edx,0x388 ;port adresse
> mov al,0x40 ;registre sb 40
> out dx,al
> ;call WaitR
> mov edx,0x389 ;data port
> mov al,0x10
> out dx,al
> ;call WaitR
>
> mov edx,0x388 ;port adresse
> mov al,0x60 ;registre sb 20
> out dx,al
> ;call WaitR
> mov edx,0x389 ;data port
> mov eax,0xf0
> out dx,al
> ;call WaitR
>
> mov edx,0x388 ;port adresse
> mov al,0x80 ;registre sb 20
> out dx,al
> mov edx,0x389 ;data port
> mov al,70
> out dx,al
>
> mov edx,0x388 ;port adresse
> mov al,0x23 ;registre sb 20
> out dx,al
> ;call WaitR
> mov edx,0x389 ;data port
> mov eax,1
> out dx,al
> ;call WaitR
>
> mov edx,0x388 ;port adresse
> mov eax,0x43 ;registre sb 20
> out dx,al
> ;call WaitR
> mov edx,0x389 ;data port
> mov eax,00
> out dx,al
> ;call WaitR
>
> mov edx,0x388 ;port adresse
> mov eax,0x63 ;registre sb 20
> out dx,al
> ;call WaitR
> mov edx,0x389 ;data port
> mov eax,0xf0
> out dx,al
> ;call WaitR
>
> mov edx,0x388 ;port adresse
> mov eax,0x83 ;registre sb 20
> out dx,al
> ;call WaitR
> mov edx,0x389 ;data port
> mov eax,0x7f
> out dx,al
> dest3:
> mov cx,0xff
> dest2:
>
> mov edx,0x388 ;port adresse
> mov al,0xa0 ;frequency
> out dx,al
> mov edx,0x389 ;data port
> mov al,cl
> xor al,dl
> out dx,al
> ;**send the sound now gogogogo go
> mov edx,0x388 ;port adresse
> mov eax,0xb0 ;registre sb 20
> out dx,al
> mov edx,0x389 ;data port
> mov eax,0x31
> out dx,al
> call Waitc
> call Waitc
> call Waitc
> call Waitc
>
> loop dest2
> ;*******************************************************
>
> mov edx,0x388 ;port adresse
> mov eax,0xb0 ;registre sb 20
> out dx,al
> ;CHK: ;attend qu'on appuye sur la touche espace*****
>
> ;mov ah,8
> ;mov dl,0xFF
> ;int 0x21
> ;cmp al,' ' ;espace
> ;je SUITE
> ;jmp CHK
> ;SUITE:
> mov edx,0x389 ;data port
> mov eax,0
> out dx,al
>
> ;mov ax,0x4c
> ;int 0x21
>
> mov ebx,0 ;first syscall argument: exit code
> mov eax,1 ;system call number (sys_exit)
> int 0x80 ;call kerne
>
>
>
> Waitc:
> push ecx
> mov ecx,0x8fff
> W1:
> nop
> loop W1
> pop ecx
> ret
> Waitb:
> push ecx
> mov ecx,0x1fff
> W2:
> nop
> loop W2
> pop ecx
> ret
> -
> To unsubscribe from this list: send the line "unsubscribe linux-assembly" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
>
next prev parent reply other threads:[~2002-06-25 8:06 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-06-24 21:51 sound philippe
2002-06-25 1:02 ` sound xlp
2002-06-25 8:06 ` Rudolf Marek [this message]
2002-06-25 21:28 ` sound h-peter recktenwald
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='af98cq$lbr$2@main.gmane.org' \
--to=marekr2@cs.felk.cvut.cz \
--cc=Linux-assembly@vger.kernel.org \
--cc=pvir@freesurf.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox