TNDY Tracker für Tandy 3 Voice Sound

  • Nachdem ich zwei kleine Tools für die TNDY Soundkarte von matze79 und den TNDLPT vom Serdashop geschrieben hatte, wurde die Idee immer konkreter, einen Tracker für den Tandy 3 Voice Sound zu schreiben.

    Ich hatte vor Urzeiten mal angefangen, einen eigenen Adlib-Tracker in Pascal zu schreiben. Ein Projekt, das ich nie beendet habe. Jetzt wurde es die Grundlage für einen Tandy-Tracker, so musste ich das Rad nicht neu erfinden.


    Das ist nun fast ein halbes Jahr her... Zwischendurch kam Corona, jobmäßig ging es bei mir drunter und drüber und Zeit für unser Forum hatte ich kaum noch und noch viel weniger, um zu programmieren. Aber irgendwie ging es dann doch weiter, denn dieses Projekt macht mir richtig Spaß! Mir kamen immer neue Ideen für Features, die ich da gerne drin haben wollte. Dazu kamen die Anregungen hier aus dem Forum.

    Aus der Idee, einen "kleinen" Tracker für Tandy-Sound zu schreiben wurde so ein immer größeres Projekt. Ich hätte nie gedacht, dass ich nochmal so ein großes Ding unter DOS programmiere, in Pascal und Assembler.


    Aber, nachdem ihr Monate nicht mehr von mir gehört habt, ist er nun tatsächlich fertig und bereit zum testen: Der TNDY Tracker!



    Ein paar Features:

    - Der PC-Speaker kann als zusätzliche Stimme benutzt werden.

    - Die Pattern von Amiga (4-Kanal) MOD-Dateien können importiert werden.

    - Die (gerippten) Musikressourcen von Sierra AGI Adventures kann importiert werden.

    - Unterstützung für Hercules bzw. monochrome Grafik

    uvm.....


    Und jetzt bin ich gespannt, wie ihr ihn findet. :D

    Dateien

    • TNDYTRK.zip

      (75,02 kB, 9 Mal heruntergeladen, zuletzt: )

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR Plus Rev. C6 und SB 16 ( CT2770 )

  • System:

    Nec V20 - 9.54Mhz

    8087 FPU

    OAK VGA 512Kb ISA (Normal Hercules Monochrom)

    2x 40Mb ST251

    2x 360Kb 5,25" Floppy

    Tandy Nano



    Mein XT mag den Tandy Tracker nicht ?


    Soundplay.exe scheint die Music viel zu schnell wieder zu geben :-)


    Komischerweise läuft es in Dosbox.

  • Es läift

    Wann tritt der Fehler genau auf? Sobald du einen Song abspielen willst, oder bereits beim Laden eines Songs?

    Und wie viel freien Speicher hast du vor dem Start des Programms?

    Der Runtime error 202 bedeutet "stack overflow". Der Fehler tritt auf, wenn eine Funktion mir lokalen Variablen aufgrerufen wird oder eine neue Variable angelegt werden soll und dafür nicht genug freier Speicher vorhanden ist. Ich versuche nachher mal, meinen Code zu optimieren, den Stack zu vergößern und hier noch etwas Platz zu sparen.


    Nicht nur in Dosbox läuft es gut. Erfolgreich getestet habe ich mit einem 486er DX4 100 MHz und einem Pentium 166. Serge schrieb mir, dass er den Tracker auf einem Pentium 75 und einem 386er getestet hat, auch ohne Probleme.

    Bisher tritt der Überlauffehler also nur bei deinem XT auf, aber auch da kriegen wir den Tracker schon noch zum Laufen :)

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR Plus Rev. C6 und SB 16 ( CT2770 )

  • 591Kb freier konventioneller Speicher sollten doch ausreichen.

    Sobald ich einen Song abspielen will, zack weg.


    Ich kann auch selbst Töne in die Spalten eintragen.

    Abstürzen tut es erst bei Play.


    Und wie gesagt SNDPLAY.EXE spielt viel zu schnell ab.

  • Leider gibt es wohl auch Probleme mit meinem Tandy 1000 RSX. Der Tracker stürzt bei mir genau so, wie bei matze79 mit "Runtime Error 202 at 0E66:0262.0". Der Rechner ist hinterher hard locked und ich kann ihn nur noch ausschalten. SNDPLAY.EXE spielt zwar, aber alle Spuren laufen ziemlich schnell auseinander und nach wenigen Sekunden hört es sich wie ein Drittklässler Geigen-Quartett an, wo jeder spielt, was er will, aber nicht das, was in den Noten steht :D

  • Vielen Dank für's Ausprobieren!

    Bei den Vogons kamen jetz viele Ideen zusammen, wo der Bug liegen könnte. Am Wochenende werde ich mal probieren, ob ich das gefixt bekomme.


    Bei SNDPLAY ist mir inzwischen klar, woran es liegt: Die SND Files enthalten Rohdaten, also direkt die Registerwerte für den Soundchip. Dazu noch einen Wert, der nach dem Schreiben der Daten jeweils gewartet werden soll.

    Das habe ich mit Int 15h, Funktion 86h gelöst, da das eine sehr zuverlässige Delay Funktion ist, die sowohl auf einem 286 als auch einem Pentium II gleichermaßen gut funktioniert.

    Was mir nicht bewusst war: Diese Funktion wurde erst mit dem AT eingeführt!

    Ein XT oder auch dein Tandy kennt die also nicht und wartet überhaupt nicht. Kein Wunder, dass das schrecklich klingt. :D

    Lässt sich aber natürlich durch eine andere Warte-Routine gut beheben. Vielleicht habe ich schon am Wochenende eine neue Version für euch.

    Alle mit einem 286er oder schneller, sollten aber die Songs problemlos genießen können und auch der Tracker sollte dort laufen.

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR Plus Rev. C6 und SB 16 ( CT2770 )

  • Moin, das kann es noch nicht sein, mein Tandy 1000 RSX ist ein AT, nämlich ein 386SX-25...

  • Das ist wirklich ein merkwürdiger Fehler....:( Ich hoffe sehr, dass es an meinem Interruptvektor für das Timing liegt. Dann dürfte es jetzt gefixt sein.

    Auf meinen Rechnern läuft der Tracker ganz wunderbar, was es mir natürlich schwer macht, den Fehler zu finden.


    Zwischenzeitlich habe ich meinen Quallcode nochmal ordentlich aufgeräumt und optimiert, Fehler behoben und viele der Anregungen umgesetzt, die ich inzwischen bekommen habe.

    Version 1.1 ist damit so gut wie fertig. Es fehlen nur noch ein paar Kleinigkeiten.

    Den Player für die AGI SND Dateien habe ich auch überarbeitet und hoffe ebenfalls, dass er jetzt überall gut läuft.


    Den Quellcode gibt es übrigens hier: https://github.com/JKnipperts/TNDY-Tracker

    Frei unter der MIT Lizenz, was in etwa dem guten alten "du kannst meinen Code gerne verwenden, aber vergiss nicht, mich bei den Credits zu nennen" entspricht :)

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR Plus Rev. C6 und SB 16 ( CT2770 )

  • Es geht voran :)

    matze79 hat zwischendurch nochmal getestet und es trat kein Laufzeitfehler mehr auf. Allerdings lief der Tracker auf seinem XT zu langsam.

    Ich habe daraufhin die Berechnung der Frequenz einer Note deutlich vereinbart. Wurde vorher jedesmal berechnet, jetzt wird der Wert aus einer Tabelle gelesen und nur ungewöhnlich hohe Frequenzen werden berechnet (tiefe Frequenzen gibt es beim Tandy ja nicht :D). Als nächstes war jetzt die Darstellung des aktuellen Ausschnitts des Pattern an der Reihe. Nach jeder gespielten Zeile alles neu zu schreiben, war für meinen 486er und erst Recht für einen Pentium kein Problem, aber beim Testen mit Dosbox war das klar als Bremse zu erkennen.

    Das habe ich jetzt mit zwei Puffern gelöst. Der komplette Pattern wird jetzt erstmal in den Speicher geschreiben, komplett fertig zum Anzeigen. Daraus wird dann der jeweils aktuelle Ausschnitt im Patterneditor eingeblendet. Beim Abspielen wird nach jeder gespielten Row die entsprechende Row des nächsten Pattern in den zweiten Puffer geschrieben und nach Row 63 werden einfach die beiden Puffer getauscht.

    Eigentlich recht simpel, aber es beschleunigt die Darstellung ungemein und ich hoffe sehr, dass damit die Probleme behoben sind.


    Ansonsten gibt es mit der neuen Version auch eine ganze Reihe weiterer kleiner Verbesserungen.

    Ich teste heute Abend noch etwas auf echter Hardware und wenn mir da nicht noch was auffällt, dann habe ich morgen eine neue Version für euch. :)

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR Plus Rev. C6 und SB 16 ( CT2770 )

  • der tracker hängt sich bei mir auf

    wenn ich abspiele dann "stoppe" und noten ändere -> Freeze

    habs gefilmt aber noch nicht hochgeladen.. mach ich später!


    Hol dir mal PCem auch noch.

    Das kann XT Maschinen direkt emulieren.

    Und Tandy 1000.

    Wäre doch ein Witz wenn ein Tandy Tracker nicht auf dem Original Tandy läuft! :-)

  • Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Und hier ist :-)

  • Danke für das Video matze79!

    Mit meinen letzten Verbesserungen sollte das Ganze jetzt schon deutlich flüssiger auf dem XT laufen.

    Und bestimmt findet sich noch etwas, um ein paar fps rauszuholen :D


    Und ich weiß jetzt auch, wo das Problem des Freeze liegt....

    Da der Tracker ab AT problemlos läuft, habe ich am Code gesucht, gibt es AT/286er spezifische Befehle usw.... nix.

    Ich und auch alle anderen, die bisher darauf geguckt haben, haben aber einen ganz offensichtlichen Unterschied zwischen Tandy, PCjr, XT und AT und später übersehen :rolleyes:


    Die Tastatur!

    Und nicht nur das Tastaturlayout ist anders....


    Im Editiermodus frage ich die Tastatur über das Bios (int 15h) ab. Das bietet sich an, da ich hier neben den Scancodes ja auch ASCII Zeichen haben möchte und dafür das Bios brauche.

    Beim Abspielen klappt das aber nicht, denn bei höherem Speed des Songs ist die Abfrage über das Bios zu langsam und hält alles auf.

    Daher frage ich hier den Tastaturport (60h) direkt ab, ob das Abspielen mit Space bzw. ESC beendet werden soll (und ob mit F1 bis F5 einer der Kanäle auf Mute gestellt werden soll).


    Matzes Video zeigt mir jetzt also. Auf seinem XT funktioniert die Abfrage eines Tastendrucks über das Bios wunderbar. Aber Port 60h scheint nicht den Scancode eienr Taste zu liefern,

    Zumindest keinen, den mein Programm kennt. Das funktioniert anscheinend erst ab AT....


    Werde da wohl noch retwas recherchieren müssen.... :tasskaff

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR Plus Rev. C6 und SB 16 ( CT2770 )

  • Coole Sache.


    Woran liegt es, dass die AGI Musik so aus dem Ruder läuft?


    Zu den Tastaturproblemen: Die Scancodes sind unterschiedlich zwischen PC/XT und AT Tastatur. Desweiteren enthält der AT einen Keyboard Controller, einen Intel 8042, WIMRE. Aber ich glaube beide Tastaturen sind über Port 60h abfragbar. Nur kannst du mit der XT Tastatur nicht sprechen und z.B. den Zustand der LEDs togglen.


    Hier mal aus PC Intern 4 die Scancodes der beiden Tastaturtypen:


  • Woran liegt es, dass die AGI Musik so aus dem Ruder läuft?

    Die AGI Musik bzw. die aus den AGI Spielen gerippten SND Dateien enthalten Rohdaten und sind entsprechend empfindlich beim Timing. Nach den Daten um eine Note/Frequenz abzuspielen folgt da oft nur eine Wartezeit von wenigen Millisekunden. Die Musik von Space Quest ist da z.B. ganz vorne mit dabei.

    In den SND Dateien ist die Wartezeit nach jeder Note in Ticks angegeben. Passend klingt es, wenn ein Tick etwa 14 bis 18 Millisekunden entspricht, was natürlich schon recht flott ist.

    Das macht das Kovertieren in ein Trackerformat entsprechend schwierig, bzw. muss der Song dann mit hoher Geschwindigkeit abgespielt werden. Perfekt ist es natürlich, wenn dann eine Row diesem Zeitraum entspricht. Dann gehen keine Informationen verloren. Tempo 55 Hz und Speed 1 klappt z.B. gut (1000/55 = 18 millisekunden pro Tick), oder 110Hz und Speed 2 usw... Da muss dann aber natürlich die CPU hinterherkommen.

    Mein SND-Player benutzt auch direkt den Timer-Interrupt und schreibt die entsprechenden Daten in den Soundchip oder setzt die Ticks aus. Ich verwende hier sogar eine Rate von 70 Hz, also 14 Millisekunden pro Tick, was meiner Meinung nach noch besser passt, als die 18 Millisekunden.

    Hier scheint der XT nicht hinterherzukommen. Mein 486er bekommt das problemlos hin und ich habe auch schon zurückgemeldet bekommen, dass auf einem 286er mit 16 MHz der SND Player problemlos läuft.

    Da muss ich also auch noch ein bisschen Testen.

    Wenn ich mit PCem emuliere, sieht beim Player alles korrekt aus. Leider kann PCem den Tandy-Sound nicht emulieren und so weiß ich nicht, ob es auch korrekt klingt :(


    Noch ein Nachtrag:

    Habe es gestern Abend mit PCem ausprobiert und Port 60h liefert auf einem emulierten Tandy 1000 nur 0 zurück. Keinerlei Scancode.

    Der Tracker wartet also ewig auf einen Tastendruck und das ist der Grund für den Freeze.

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR Plus Rev. C6 und SB 16 ( CT2770 )

    Einmal editiert, zuletzt von Dragonsphere ()

  • Also ich bin sehr, sehr sicher, dass 060h auch auf PC, XT und Co Scancodes liefert:



    Ich wette, dass auch ein Tandy 1000 dem folgt. Wie sieht denn deine Tastaturabfrage aus?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!