PC-Speaker
-
Hi!
Mein Problem hat zwar nicht direkt etwas mit Assembler zu tun, aber ich denke hier passt es am besten hin.
Ich weiß, das man über den PC-Speaker Töne ausgeben kann, indem man den
Speaker an den programmierbaren internen Timer anhängt (Ports 0x40-0x43).Aus bestimmen Gründen möchte ich dies aber nicht tun, sondern den Speaker über meinen eigenen Timer ansteuern.
Durch Probieren habe ich herausgefunden, daß man ebenfalls Geräusche erzeugen
kann, wenn man Bit 1 am Speaker-Port (0x61) an- und auschaltet.Das Problem ist nun, daß man damit anscheinend nur Rechteck-Signale erzeugen kann.
Ich möchte aber auch andere Signale (z.B. Sinus) erzeugen.Dazu müßte man den Speaker ja irgendwie analog ansteuern können.
Ist dies überhaupt möglich?
Gibt es irgendwo eine Übersicht, welche Funktion die einzelnen Bits des Ports 0x61 haben?Danke schonmal
-
Hi.
Nein, ist nicht moeglich. Du kannst den Speaker entweder ein- oder ausschalten, mehr geht nicht.
Du kannst aber ein bissel mit dem PIT rumtricksen...
Zieh' dir dazu mal die "Speaker.txt" in der "PCGPE 10" hier rein...Belegung des Port 61h ist uebrigens folgende:
VIA schrieb:
Port 61 - Misc Functions & Speaker Control ................. RW
7 Reserved ........................................always reads 0
6 IOCHCK# Active .................................................RO
This bit is set when the ISA bus IOCHCK# signal is
asserted. Once set, this bit may be cleared by setting
bit-3 of this register. Bit-3 should be cleared to
enable recording of the next IOCHCK#. IOCHCK#
generates NMI to the CPU if NMI is enabled.
5 Timer/Counter 2 Output......................................RO
This bit reflects the output of Timer/Counter 2
without any synchronization.
4 Refresh Detected...................................................RO
This bit toggles on every rising edge of the ISA bus
REFRESH# signal.
3 IOCHCK# Disable...............................................RW
0 Enable IOCHCK# assertions ................. default
1 Force IOCHCK# inactive and clear any
“IOCHCK# Active” condition in bit-6
2 Reserved ........................................RW, default=0
1 Speaker Enable ....................................................RW
0 Disable................................................... default
1 Enable Timer/Ctr 2 output to drive SPKR pin
0 Timer/Counter 2 Enable .....................................RW
0 Disable................................................... default
1 Enable Timer/Counter 2
-
Ok, vielen Dank!
-
-
@masterof x32
Hi, ich hab mir des mal durchgelesen, aber krieg nichts zum Laufen.
Ich hab mal versucht ein Prog zu machen, passiert aber nix. Wie ich dem Tutorial entnommen habe müsste es so ja gehen:MODEL SMALL .STACK 100h CODE SEGMENT WORD 'CODE' assume CS:CODE start: mov al,182 out 43h,al mov al,54 out 42h,al mov al,124 out 42h,al in al,61h or al,3 out 61h,al exit: in al,60h cmp al,1 jne exit mov ax,4c00h int 21h code ends end start
@all
Ich arbeite eigentlich nur mit Mikrocontrollern und nicht mit dem PC in ASSEMBLER. Vielleicht ist es ein Leichtsinnsfehler oder sonst was, aber ich find echt nichts. Könnt ihr mich bitte aufklären, warum da nichts geht?
Danke schon einmal.
Gruß Red!
-
Hi,
kann mir denn keiner weiterhelfen?
Wie gesagt, ich kenn mich mit x86 Ports usw. nicht aus.
Danke für eure Bemühungen.
Gruß Red!