TNDY Tracker für Tandy 3 Voice Sound

  • Ich habe es jetzt einfach mit einem kleinen Programm getestet, dass in eienr Schleife port 60h ausliest und den Wert anzeigt. Bei AT und höher ist es entsprechend der Scancode der Taste.

    Emuliere ich einen Tandy oder XT und lasse das Programm laufen, dann wird 0 angezeigt, egal was ich drücke.

    Werde das nachher weiter ausprobieren.

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Wie merkwürdig. Ich würde vermuten, dass die Tandy1000 Emulation im PCem der des PCJr entspricht, zu dem er ja kompatibel war?


    Wenn ich mir den Code für das PCJr Keyboard anschaue, werden dort auch die normalen XT Ports 60h-63h benutzt: https://github.com/sarah-walke…/src/keyboard_pcjr.c#L161

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

  • Nach einigem Stöbern im Internet habe ich gefunden, was beim XT beachtet werden muss :)

    Ab AT kann der Scancode ja einfach über Port 60h ausgelsen werden. Port 60h ist es auch beim XT, aber außerdem muss über Port 61h jedes Mal signalisiert werden, dass der Code gelesen wurde und der nächste Tastendruck empfangen werden kann. Solange das nicht geschieht, wird kein neuer Code ausgegeben. :mist


    Eine funktionierende Abfrage der Tastaturscancodes für PC und XT sieht demnach so aus:

    Code
           in al,060h     ;    get key    code
           push ax        ;    save it
           in al,061h     ;    get current control
           mov ah,al      ;    save PB    control
           or al,80h      ;    set keyboard bit
           out 061h,al    ;    keyboard acknowledge
           xchg ah,al     ;    get back PB
           out 061h,al    ;    reset PB control
           pop ax         ;    get back code

    Quelle: http://lh.ece.dal.ca/csteaching/pcdev.html


    Ganz schön umständlich und das muss man wirklich erstmal wissen. Ab AT reicht dafür dann die erste Zeile vollkommen aus :D


    Zum Glück lässt sich eine AT Tastatur aber auf die älteren XT Scancodes umstellen:


    Zitat

    Writing 0xf0 followed by 1, 2 or 3 to port 0x60 will put the keyboard in scancode mode 1, 2 or 3.

    [...] Set 1 contains the values that the XT keyboard (with only one set of scancodes) produced, with extensions for new keys.


    Quelle: https://www.win.tue.nl/~aeb/li…odes-10.html#scancodesets


    Mit unterschiedlichen Scancodes brauche ich mich also wohl nicht rumzuärgern. Ich probiere das nachher mal aus.

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Exzellent! Ich muss mal schauen, ob das im PC Intern auch beschrieben steht. Gute Idee für eine weitere Let's Code Folge... Tastatur hatte ich ja schon mal, aber nur AT style.


    EDIT: Erstaunlicherweise steht in PC Intern NUR die Programmierung per BIOS oder per AT Tastaturcontroller beschrieben, aber NICHT wie man das beim XT macht. Das ist ein wenig schade.


    EDIT2: und stanislavs helppc hat auch null Informationen dazu: https://www.stanislavs.org/helppc/idx_hardware.html

    Da wird nur "Port B" unter 0x61 erwähnt, aber nicht, was sich dahinter verbirgt. Der 8255 wird nicht beschrieben.

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

    Einmal editiert, zuletzt von root_42 ()

  • Warum nicht einfach den Dosinterupt für Tastenabfragen nehmen, funktioniert bei XT,AT,HP 150, Sanyo MBC....

    Von allen Dingen auf Erden ist die Intelligenz am gerechtesten verteilt: Jeder glaubt, er hätte genug davon.

  • Warum nicht einfach den Dosinterupt für Tastenabfragen nehmen, funktioniert bei XT,AT,HP 150, Sanyo MBC....

    Schrieb Dragonsphere doch weiter oben. Zu langsam für ihn.

    Ganz genau. Die standard Interruptroutinen nutze ich ja auch. Die nehme ich beispielswiese für das Editieren der Pattern, Texteingaben usw., da ich so auch immer problemlos und auf allen Systemen die Ascii-Zeichen zu den Tasten zur Verfügung habe.

    Wenn ich aber einen Song mit hohem Tempo, Speed 1 oder 2, abspiele, dann funktioniert die Tastenabfrage per Interrupt nicht mehr. Ganz extrem natürlich bei Speed 1, da wird dann eine Zeile im Pattern pro Timer-Tick gespielt. Bei 50 Hz sind das beispielsweise 18 Millisekunden, in denen der Code zum Abspielen, eventuelle Effekte und die Tastaturabfrage erfolgen muss. Und wenn ich das dann per Interrupt versuche, wird bei langsameren Prozessoren entweder kein Tastencode mehr geliefert oder es kommt zu ominöse Laufzeitfehlern (Stack-Überlauf etc.). Aber schnell Port 60h auslesen, braucht so wenig CPU-Zeit, dass das ganz problemlos funktioniert. Zumindest bei AT Architektur.....

    Ich habe auch kaum Infos dazu gefunde. Auf den ganzen guten Seite mit Programmiertipps und alten Artikeln heißt es immer nur, dass auf eine Darstellung der Keyboard-Routinen für den XT verzichtet wird, da sie seit Einführung des AT vollkommen obsolet geworden seien....

    Es klappt auch immer noch nicht so richtig und deshalb habe ich gerade Alley Cat in den Disassembler geladen und gucke mir an, was Bill Williams so mit Port 60h und 61h angestellt hat.:D

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Sehr schön, dass das klappt! :D Klingt aber etwas gewöhnungsbedürftig, es geht doch nichts über den originalen Sound :)


    An dieser Stelle vielleicht mal ein kleines Update, denn seit meinem letzten Beitrag hier ist ja schon wieder ordentlich Zeit vergangen...

    Das Projekt lebt noch! :)

    Ich habe vieles verbessert und überarbeitet und mit mehr als ca. 15 MHz läuft der Tracker super. Komische Abstürze sollte es auch mit weniger Rechenleistung nicht mehr geben, aber Abspielen wird dann zäh wie Kaugummi und das Timing passt nicht mehr. Ich habe nochmal viel Zeit in die Optimierung des Quellcodes gesteckt, habe das aber nicht wirklich verbessern können.

    Da ich aber bei Vogons auch schon um Playercode in Assembler gebeten wurde, habe ich die Weihnachtsfeiertage dazu genutzt, erstmal einen Player in reinem Assemblercode zu schreiben. Der ist fertig und läuft auch mit nur einer Hand voll MHz absolut flüssig. Ich habe per PCem auf einem Tandy 1000, Tandy 1000 HX, Tandy 1000 SL und PCjr getestet und es gab keine Probleme.

    Jetzt muss ich nur noch der Assemblercode auch im Tracker verwenden. Aber da ich im Januar viel Arbeit hatte, bin ich noch nicht dazu gekommen.

    Soweit also der aktuelle Stand.

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • So, endlich habe ich mal wieder genügend Zeit für dieses Projekt gefunden.

    Hat doch alles nochmal etwas länger gedauert, aber hier ist sie nun endlich: Version 1.2 des TNDY Tracker!


    Alles wurde nochmal ordentlich optimiert, vor allem die Abspielroutine und das Bildschirmupdate beim Abspielen, damit der Tracker auch mit langsamen CPUs läuft.

    Daneben wurde ein Haufen Bugs gefixed und ich habe auch noch ein paar nette neue Features eingebaut.

    Etwa habe ich die Tastenbelegung nochmal überarbeitet und die wichtigsten Funktionen liegen jetzt auf den F-Tasten, ähnlich wie auch beim Adlib Tracker II.

    Also F2 für speichern, F3 für laden, Abspielen des Songs mit F5 usw. funktionieren jetzt auch hier.

    Auch Copy&Paste ist jetzt möglich, wie gewohnt könnt ihr mit Ctrl+C, Ctrl+X, Ctrl+V Kopieren, Ausschneiden und Einfügen. Mit Shift und Pfeiltaste oben/unten können dafür Bereiche markiert werden.

    Alle Abspielfunktionen laufen komplett im Hintergrund, ihr könnt also Menüs öffnen usw., während ein Song abgespielt wird.

    Hmmm... Was ist sonst noch neu... Ja, es gibt jetzt einen coolen neuen Infobildschrim, der alternativ zum durchlaufenden Pattern (trace mode) angezeigt werden kann. Mit Peak-Meter! 8)

    Außerdem liegt jetzt, wie in der guten alten Zeit üblich, player code bei. 100% Assemblercode und einfach in eigene Programme einzufügen. Zwei kleine Beispielanwendungen, eine davon ein kleiner Player für die Kommandozeile, sind auch dabei.


    Wie schon angekündigt läuft mit PCem läuft alles stabil auf einem Tandy 1000 mit 8088 und 4.77 MHz. Beim Abspielen schneller Songs "laggt" das Bildschirmupdate mitunter ein bisschen und die Ladezeiten sind...lang! Aber das erwartet man ja geradzu bei 4 MHz oder? :)

    Ein standard Tandy 1000 reicht aber nicht aus, denn 256 KB müssen es dann für den Tracker schon sein (und dann ist die Songlänge noch sehr limitiert). Ist ja aber auch hochprofessionelle Audiosoftware für Rechner aus den frühen 80ern :D

    Aber auf einem HX oder SL sollte der Tracker jetzt ohne Probleme laufen und auf allem schnelleren natürlich sowieso :)


    Hier der Link:https://github.com/JKnipperts/…oad/v1.21/TNDYTRK_v12.zip

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Na dann muss ich den TNDLPT mal wieder anstöpseln! Momentan steckt da das X1541 drauf! :)

    Und matze‘s tndy ist momentan auch nicht eingesteckt.

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

  • Ich habe soeben Mal schnell mit dem Prototypen meiner Franky-I Soundkarte probiert, und der Tracker scheint damit einwandfrei zu laufen. Zumindest die zwei Songs, die dabei sind, haben gespielt. Ich muss mal ein Paar mehr Samples finden und versuchen, aber so weit so gut! Getestet auf einem 386DX-40.

  • Es gibt ein kleines Update:

    Serge hat den Tracker getestet und auch ein Youtube-Video davon gemacht. Ihm ist aufgefallen, dass beim Import von AGI Musik bei manchen Stücken die letzten Noten einer Stimme hängen bleiben.

    Anscheinend stellt der Player in den AGI Spielen eine Stimme auf mute, wenn keine weiteren Daten für die Stimme folgen.

    Habe diesen "Hanging note bug" direkt gefixed (sind hier ja schließlich nicht bei Creative Labs :D) und auch gleich noch einen Tippfehler im Menü korrigiert.

    Die neueste Exe-Datei könnt ihr euch einfach aus dem GitHub ziehen. Oder soll ich sie hier auch nochmal posten?


    Ansonsten funktionierte bei ihm alles einwandfrei und er wird noch mehr Videos zum Tracker machen. :)

    Ich habe soeben Mal schnell mit dem Prototypen meiner Franky-I Soundkarte probiert, und der Tracker scheint damit einwandfrei zu laufen. Zumindest die zwei Songs, die dabei sind, haben gespielt. Ich muss mal ein Paar mehr Samples finden und versuchen, aber so weit so gut! Getestet auf einem 386DX-40.

    Danke für's ausprobieren! :)

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

Jetzt mitmachen!

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