09.09.2015, 22:15
Hi Dr. Guru,
ich freu mich, dass dir NIM gefällt. ASM am Amiga macht wirklich Spaß (C hatte ich nie gemocht - NIM ist auch komplett in ASM geschrieben)... Aber zu deinen Fragen:
1. Sind alle Effekte in Full Frame Rate 50Hz?
--> Ja, natürlich, alles 50Hz. Am besten packst du dir die Datei auf eine bootfähige Diskette und startest sie via shell/cli - direkt auf einem A500. Dann kannst du NIM quasi bare metal genießen und siehst auch, dass alle Effekte mit 50hz laufen
2. Ist das Musikstück ein MOD-File?
--> jupp, ist ein typisches Soundtracker/Noicetracker-Format
3. Wie funktioniert generelle so eine Musikabspielroutine (grob)? Sind das Interrupts, die der CPU sagen, dass sie Daten an Paula schicken soll? Läuft das über den Copper? Gibt es P'robleme, dass die Musikabspielroutine dem Prozessor für andere Effekte notwenige Zyklen klauen könnt
--> Die Abspielroutine besteht aus zwei Teilen: einem "Init"-Teil und einem "loop"- oder "music"-part. Ersterer wird einmalig irgendwann zum Start des Programms/Demos angesprungen. Vorher müssen aber einige Daten- und Address-Register auf dem Stack gesichert mit movem.l d0-d7/a0-a2,-(a7) gesichert werden. Am Ende der Init werden dann alle Register wieder hergestellt: movem.l (a7)+,d0-d7/a0-a2
Das Modul selbst wird via Sprung in den music/loop etc...einmal je Frame (also je 50tel sek) abgespielt. Dass kann entweder ganz klassich über die eigene Basis-Rotine geschehen (wenn du sicher stellen kannst, dass die Routine je Frame einmal angesprungen werden kann). Oder du erledigst das via Interrupt. (war bei mir fast nie möglich, da ich meist zu allererst sämtliche Interuppts via move #$4000, dff09a deaktiviert hab).
Im Anhang findest du eine meiner ASMOne-Sources dazu (das .jpg im Dateinamen musst du entfernen, dann kannste die Datei sogar mit dem Win Editor lesen)
Und ja, die Abspielroutine verbraucht einige Rasterzeilen... Es gibt hier allerdings Unterschiede. Ich meine, dass wir zum Schluss eine Fasttracker-Variante verwendet hatten. Die war mit Abstand die schnellste...
Zum Tunneleffekt:
4. Läuft das komplett über die CPU oder können hier in irgendeiner Form Blitter und Copper genutzt werden?
--> Die Dots werden via CPU gesetzt. Der Copper kann leider nur aller 8 Taktzyklen/Pixel (beim A500) ein Register beschreiben (beispielsweise $dff180-Hintergrundfarbe bzw. colour00). Damit kannst du keine pixelgenaue Bewegung erzeugen (bei schnelleren Amigas geht das zumindest im 2x2-Pixelformat) Mit guten Routinen bekommt man aber auch 4x4 am A500 hin...
5. Verwendest du DoubleBuffering oder schaffst du es, die Bildschirmspeicheränderung durchzuführen, wenn der Rasterzeiger außerhalb des sichtbaren Bereichs ist?
--> Triple-Buffering: Frame 1 wird gezeigt, Frame zwei wird gelöscht (via Blitter), Frame drei wird erzeugt (via CPU)
6. Wird der Zoom mittels linearer-Algabra-3D-Tranformation durchgeführt oder sind die Daten alle 2d gespeichert und werden in 2d transformiert?
Die Daten sind in 3d gespeichert (genauer gesagt ein einzelner Dot-circle) und werden dann entsprechend dupliziert und transformiert.
7. Wird die Verschiebung nach oben/unten durch eine tatsächliche Änderung des Bildschirmspeicherinhalts erzeugt oder wird dies mittels Verschiebung der Startadresse des Bildschirmspeichers bewirkt?
--> hier werden offsets auf die 3d-Koordinaten addiert.
Der Rotationszoomer ist natürlich, seit der WoC-Demo von Sanity, ein klassischer Spitzeneffekt. Ich sehe aber mal davon, hierzu Fragen zu stellen, da ich im Moment null Vorstellung habe, wie man so etwas bewerkstelligen könnte.
--> Ist nen copper-rotator... hier wird eine copperlist verwendet, welche von der cpu ständig neu beschrieben wird (gaaanz banal erklärt)...
Ich hoffe ich konnte deine Fragen beantworten. Und wenn du Lust hast tatsächlich bissl asm zu coden, dann helf ich gern...
Grüße
Holzi
Edit: Jetzt sollte jeder Interessierte hier im Forum die Soundtracker-Routine haben. Ich nehm die dann mal wieder raus...
ich freu mich, dass dir NIM gefällt. ASM am Amiga macht wirklich Spaß (C hatte ich nie gemocht - NIM ist auch komplett in ASM geschrieben)... Aber zu deinen Fragen:
1. Sind alle Effekte in Full Frame Rate 50Hz?
--> Ja, natürlich, alles 50Hz. Am besten packst du dir die Datei auf eine bootfähige Diskette und startest sie via shell/cli - direkt auf einem A500. Dann kannst du NIM quasi bare metal genießen und siehst auch, dass alle Effekte mit 50hz laufen
2. Ist das Musikstück ein MOD-File?
--> jupp, ist ein typisches Soundtracker/Noicetracker-Format
3. Wie funktioniert generelle so eine Musikabspielroutine (grob)? Sind das Interrupts, die der CPU sagen, dass sie Daten an Paula schicken soll? Läuft das über den Copper? Gibt es P'robleme, dass die Musikabspielroutine dem Prozessor für andere Effekte notwenige Zyklen klauen könnt
--> Die Abspielroutine besteht aus zwei Teilen: einem "Init"-Teil und einem "loop"- oder "music"-part. Ersterer wird einmalig irgendwann zum Start des Programms/Demos angesprungen. Vorher müssen aber einige Daten- und Address-Register auf dem Stack gesichert mit movem.l d0-d7/a0-a2,-(a7) gesichert werden. Am Ende der Init werden dann alle Register wieder hergestellt: movem.l (a7)+,d0-d7/a0-a2
Das Modul selbst wird via Sprung in den music/loop etc...einmal je Frame (also je 50tel sek) abgespielt. Dass kann entweder ganz klassich über die eigene Basis-Rotine geschehen (wenn du sicher stellen kannst, dass die Routine je Frame einmal angesprungen werden kann). Oder du erledigst das via Interrupt. (war bei mir fast nie möglich, da ich meist zu allererst sämtliche Interuppts via move #$4000, dff09a deaktiviert hab).
Im Anhang findest du eine meiner ASMOne-Sources dazu (das .jpg im Dateinamen musst du entfernen, dann kannste die Datei sogar mit dem Win Editor lesen)
Und ja, die Abspielroutine verbraucht einige Rasterzeilen... Es gibt hier allerdings Unterschiede. Ich meine, dass wir zum Schluss eine Fasttracker-Variante verwendet hatten. Die war mit Abstand die schnellste...
Zum Tunneleffekt:
4. Läuft das komplett über die CPU oder können hier in irgendeiner Form Blitter und Copper genutzt werden?
--> Die Dots werden via CPU gesetzt. Der Copper kann leider nur aller 8 Taktzyklen/Pixel (beim A500) ein Register beschreiben (beispielsweise $dff180-Hintergrundfarbe bzw. colour00). Damit kannst du keine pixelgenaue Bewegung erzeugen (bei schnelleren Amigas geht das zumindest im 2x2-Pixelformat) Mit guten Routinen bekommt man aber auch 4x4 am A500 hin...
5. Verwendest du DoubleBuffering oder schaffst du es, die Bildschirmspeicheränderung durchzuführen, wenn der Rasterzeiger außerhalb des sichtbaren Bereichs ist?
--> Triple-Buffering: Frame 1 wird gezeigt, Frame zwei wird gelöscht (via Blitter), Frame drei wird erzeugt (via CPU)
6. Wird der Zoom mittels linearer-Algabra-3D-Tranformation durchgeführt oder sind die Daten alle 2d gespeichert und werden in 2d transformiert?
Die Daten sind in 3d gespeichert (genauer gesagt ein einzelner Dot-circle) und werden dann entsprechend dupliziert und transformiert.
7. Wird die Verschiebung nach oben/unten durch eine tatsächliche Änderung des Bildschirmspeicherinhalts erzeugt oder wird dies mittels Verschiebung der Startadresse des Bildschirmspeichers bewirkt?
--> hier werden offsets auf die 3d-Koordinaten addiert.
Der Rotationszoomer ist natürlich, seit der WoC-Demo von Sanity, ein klassischer Spitzeneffekt. Ich sehe aber mal davon, hierzu Fragen zu stellen, da ich im Moment null Vorstellung habe, wie man so etwas bewerkstelligen könnte.
--> Ist nen copper-rotator... hier wird eine copperlist verwendet, welche von der cpu ständig neu beschrieben wird (gaaanz banal erklärt)...
Ich hoffe ich konnte deine Fragen beantworten. Und wenn du Lust hast tatsächlich bissl asm zu coden, dann helf ich gern...
Grüße
Holzi
Edit: Jetzt sollte jeder Interessierte hier im Forum die Soundtracker-Routine haben. Ich nehm die dann mal wieder raus...