Timer mit einer Frequenz von 8.000Hz?

Moderator: Rockford

Antworten
patjomki
Beiträge: 369
Registriert: 18.08.2021 23:21
Has thanked: 132 times
Been thanked: 74 times
Kontaktdaten:

Timer mit einer Frequenz von 8.000Hz?

Beitrag von patjomki »

Hallo,

ich möchte beim Ausgeben von Tönen eine ADSR-Hüllkurve per Lautstärke-Register (z.B. $d201 AUDC1 für POKEY-Kanal aka -Stimme 1) simulieren.

Dies bedeutet, dass ich das Lautstärke-Register im ungünstigsten Fall (Das "Attack" von "A"DSR mit 2 Millisekunden) mit 8.000 Herz ändern muss (16 Lautstärkeänderungen in 2 Millisekunden -> 2/1000 ÷ 16 = 1/8.000)

Ein Vertical-Blank-Interrupt (1/50 bzw. 50Hz hier bei uns mit PAL) ist also zu langsam. Nun gibt es ja die POKEY-Timer, aber damit verliert man ja auch eine Pokey-Stimme.

Gibt es irgendeine andere Möglichkeit, so eine hohe Abfragefrequenz zu erzeugen?

Benutzeravatar
pps
Beiträge: 799
Registriert: 18.06.2021 23:05
Has thanked: 198 times
Been thanked: 388 times
Kontaktdaten:

Re: Timer mit einer Frequenz von 8.000Hz?

Beitrag von pps »

Also man könnte die beiden VBI und auch alle DLI auch nutzen, um timer zu haben.
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Erhard
Beiträge: 1115
Registriert: 04.11.2021 15:52
Has thanked: 132 times
Been thanked: 342 times
Kontaktdaten:

Timer mit einer Frequenz von 8.000Hz?

Beitrag von Erhard »

pps hat geschrieben:
10.09.2025 16:11
alle DLI auch nutzen, um timer
Aber "interrupten" die nicht nur während der Bilddarstellung?

Ich hatte das so verstanden, als würde der Time ohne "Pause" benötigt.
Jede Info, die zu Hause auf meinem Rechner liegt habe ich unterwegs nicht verfügbar.
Jede Info, die im Netz liegt finde ich nicht wieder, wenn ich sie benötige.

Benutzeravatar
Kveldulfur
Beiträge: 1065
Registriert: 17.08.2021 02:32
Has thanked: 513 times
Been thanked: 461 times
Kontaktdaten:

Re: Timer mit einer Frequenz von 8.000Hz?

Beitrag von Kveldulfur »

Hallo!

8000Hz? Also der VBI läuft bei PAL in 50Hz. Um 8000Hz zu erhalten, müsstest Du Deine Routine 160x während eines Bildaufbaus ausführen.
Der VCOUNT geht von 0-155 soviel ich weiß, also müsste Deine Routine bei jeder VCOUNT-Änderung aufgerufen werden, um ca. 7800Hz zu erhalten..
Du hättest auch nur wenige CPU-Zyklen, um dann überhaupt etwas zu machen und das ganze wäre zudem ungleichmäßig, da es auch einen nichtsichtbaren Bereich gibt (wo der Kathodenstrahl zurück fährt) dessen Zeit Du nicht nutzen würdest.

Gleichmäßig würde es nur der Pokey-Timer schaffen, soviel ich weiß.

Also 8000Hz ist schon heftig ;-)

Grüße
Janko
Meine Projekte findest Du hier...

patjomki
Beiträge: 369
Registriert: 18.08.2021 23:21
Has thanked: 132 times
Been thanked: 74 times
Kontaktdaten:

Re: Timer mit einer Frequenz von 8.000Hz?

Beitrag von patjomki »

pps hat geschrieben:
10.09.2025 16:11
Also man könnte die beiden VBI und auch alle DLI auch nutzen, um timer zu haben.
Nee, die gehen leider nicht, da der VBI ja nur 50Hz (PAL) hat und ich eben 8000Hz benötige. Ja, so schnell (maximal) ändert der SID die Lautstärke für seine ADSR-Hüllkurve.

Um den VBL und DLI für Grafikmanipulationen frei zu halten, würden sich ja auch die Systemtimer anbieten (cdtmv1-cdtmv5), aber die laufen eben auch maximal mit einer Geschwindigkeit von 50Hz (PAL).
Erhard hat geschrieben:
10.09.2025 16:41
pps hat geschrieben:
10.09.2025 16:11
alle DLI auch nutzen, um timer
Aber "interrupten" die nicht nur während der Bilddarstellung?

Ich hatte das so verstanden, als würde der Time ohne "Pause" benötigt.
Ganz genau. Nach 0,125 Millisekunden (=0,000125 = 1/8000 Sekunde) erhöht sich im schnellsten Fall das Lautstärkebit in der Attack-Phase des SID. Daher benötige ich eben einen Timer, der exakt nach 1/8000 Sekunde anschlägt. Mit dem VBL (50Hz) oder selbst DLI (50x155=7750Hz) bin ich einfach nicht schnell genug.
Kveldulfur hat geschrieben:
10.09.2025 16:45
Gleichmäßig würde es nur der Pokey-Timer schaffen, soviel ich weiß.

Also 8000Hz ist schon heftig ;-)
Ja, der SID ist ein Biest. Aber mit den POKEY-Timern wäre das ein Kinderspiel. Die können ja mit 15Khz, 64Khz oder 1,77Mhz betrieben werden.

Bin nur noch nicht sicher, welchen Wert ich in das AUDF-Register schreiben muss, um auf exakt 8Khz zu kommen.
Im 64Khz-Modus müsste es aber 32 sein, oder? Also 64Khz durch 256 mögliche Werte macht 250Hz pro Wert. Also 32x250=8000 also müsste der POKEY-Timmer auf 32 gesetzt werden, um nach 1/8000 Sekunde einen Interrupt auszulösen, wo ich dann in der Interrupt-Routine dann das Lautstärkebit um eins erhöhe.

Benutzeravatar
pps
Beiträge: 799
Registriert: 18.06.2021 23:05
Has thanked: 198 times
Been thanked: 388 times
Kontaktdaten:

Re: Timer mit einer Frequenz von 8.000Hz?

Beitrag von pps »

Ich meinte schon wirklich alle Interrupts nutzen... Dann hast Du 2xVBI und so bis zu 239 DLI... Aber durch die vielen Interrupts kaum Zeit, was zu tun...
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

patjomki
Beiträge: 369
Registriert: 18.08.2021 23:21
Has thanked: 132 times
Been thanked: 74 times
Kontaktdaten:

Re: Timer mit einer Frequenz von 8.000Hz?

Beitrag von patjomki »

Ach so. Das könnte gehen, allerdings soll das ja nur die Hüllkurve für einen einzigen SID-Kanal sein, sprich: es wird nur Musik "nebenbei" abgespielt. Da soll schon noch genug Zeit für den Rest bleiben.

Ich versuche es erstmal mit dem POKEY-Timer. Bei einer Stimme ist es ja kein Problem, da bleiben vom Pokey ja noch drei Kanäle für den eigentlichen Ton über. Selbst wenn man einen 16-Bit-Ton ausgibt (macht der SID ja nur so), kommt man bei einem SID-Kanal immer noch hin.

Für einen Test mit einer Stimme also alles ausreichend. Ich werde berichten.

Erhard
Beiträge: 1115
Registriert: 04.11.2021 15:52
Has thanked: 132 times
Been thanked: 342 times
Kontaktdaten:

Timer mit einer Frequenz von 8.000Hz?

Beitrag von Erhard »

.
patjomki hat geschrieben:
10.09.2025 21:07
Ich versuche es erstmal mit dem POKEY-Timer.
Du wirst Dich sicherlich noch mit den Prioritäten der Unterbrechungsanforderungen auseinandersetzen müssen.

Ich weiß nicht, wie das tatsächlich ist, aber es könnte ja sein, daß während Deine Routine durch den POKEY-Interrupt gestartet läuft, trotz gesetztem SEI der VBI mit höherer Prio dazwischenhaut.

Dann gibt es noch den DRAM-REFRESH, der mit 8-9 Zyklen regelmäßig dazwischenhaut sowie den DMA des ANTIC, wo für den Bildschirmaufbau tonnenweise HALT-Zyklen die CPU stoppen.
Jede Info, die zu Hause auf meinem Rechner liegt habe ich unterwegs nicht verfügbar.
Jede Info, die im Netz liegt finde ich nicht wieder, wenn ich sie benötige.

patjomki
Beiträge: 369
Registriert: 18.08.2021 23:21
Has thanked: 132 times
Been thanked: 74 times
Kontaktdaten:

Re: Timer mit einer Frequenz von 8.000Hz?

Beitrag von patjomki »

Ja, das hatte ich befürchtet. Das wird wohl auch der Grund sein, dass früher viele Programme den Bildschirm komplett ausgeschaltet haben, wenn Sie ein Sample ausgeben wollten.

Wie wir seit Bosconian wissen, wäre das gar nicht nötig. Habe hier schon bei komplett eingeschalteten Bildschirm ein Sample (4-Bit, 7.800Hz) mit der Methode von pps über das Pokey-Lautstärkebit ausgegeben, allerdings geht das bei mir nur, wenn man keine Action auf dem Bildschirm hat (möchte wissen, wie shanti77 dass ingame mit "Blast Off" macht, nicht nur am Anfang, da wird echt der Bildschirminhalt noch upgedatet).

Naja, für die Aufgabe, eine Hüllkurve zu simulieren, ist natürlich Stillstand auf dem Bildschirm sowieso tabu, möchte man den Song doch als Hintergrundsong in einem Game hören. Mal sehen, wie sehr sich die ganzen Unterbrechungen auf die Pokey-Timer auswirken.

Allerdings habe ich ab Montag keinen Urlaub mehr, ich befürchte, dann wird Zeit, die für die Programmierung übrig bleibt, wieder sehr eingeschränkt zur Verfügung stehen. :cry:

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast