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!


Anmelden zum Antworten