Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von zatzen »

Ja, ELSE benötigt in Pascal auf begin und end wenn mehrere Anweisungen folgen. Wenn direkt ein IF folgt aber nicht.

Also wie gesagt, ich kann das komplett machen, vielleicht besser weil ich Dinge vorhabe die weit darüber hinausgehen den Code 1:1 zu portieren. Aber ich kann die Unit dann gerne ausführlich kommentieren, so dass Du darüber einen guten Einblick in Pascal und Assembler bekommst.
Ich hätte eben Spaß daran relativ unabhängig vom Originalcode eine möglichst speichersparende und performante Unit zu machen.
mov ax, 13h
int 10h

while vorne_frei do vor;
Benutzeravatar
Thomas
DOS-Kenner
Beiträge: 426
Registriert: Mi 22. Jun 2016, 12:29
Wohnort: Nähe von Limburg / Lahn

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von Thomas »

Klingt cool! Nee, habe absolut nix dagegen wenn du dass in die Hand nimmst! Nur fürchte ich dass ich nicht helfen kann wenn du mich um Rat fragen müsstest. Du kennst die Zusammenhänge dieses Players doch jetzt schon besser als ich... :-(
Klar, BT.Play ist die härteste Nuss! Zum einen ist es am meisten Code und zum anderen diese vielen verschachtelten IFs.

Das neue Format ist prima! Bringt aber (für mich) einen entscheidenden Nachteil: Ich kann den Tracker (vorerst) nicht mehr zum Komponieren nutzen oder traust Du Dir zu den auch noch anzupassen? Wobei das letztendlich auch wieder nicht so viel komplizierter sein dürfte wenn der Player erstmal steht. Die Play Routine ist ziemlich die gleiche wenn ich das richtig erkannt habe. Der übrige SchnickSchnack sind Bildaufbau und Tastaturabfrage.

Habe jetzt nochmal die IFs bei mir gecheckt! Tatsächlich stand dort ein End zu einem Else ohne Begin. Warum der Compiler da aber nicht meckert ist mir ein Rätsel. Aber das hat es noch schlimmer gemacht... Ich bleibe dran.
Ein bisschen DOS kann oft mehr als ein Haufen Fenster.

Gigabyte GA-586HX, P54C 100@75MHz, 24MB RAM, AVGA3-22-1M ISA, RTL8029AS PCI, Goldstar Prime 2 ISA, MA5ASOUND, Dreambl. X2 DB, HD 4x2GB, 48x CD, 3,5" Floppy, 2xRS232, 1xPar., PS/2 Maus
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von zatzen »

Das Format bleibt ja das gleiche, der Tracker speichert seine PIS Dateien und die lade ich nur anders rein, werden dann genauso abgespielt. Ich kann dann auch noch Order-Jumps einbauen oder Order-Loop Definitionen.

Oder wolltest Du den Tracker selbst auch nach Pascal portieren?
mov ax, 13h
int 10h

while vorne_frei do vor;
Benutzeravatar
Thomas
DOS-Kenner
Beiträge: 426
Registriert: Mi 22. Jun 2016, 12:29
Wohnort: Nähe von Limburg / Lahn

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von Thomas »

Ach so, dann habe ich das missverstanden.
Den Tracker wollte ich nicht zwingend portieren. Wäre aber auch eine gute Übung. Aber der muss ja nicht performant sein. Mir reicht da die Basic Variante. Könnten diese aber probieren auch auf Heap umzumünzen, muss aber nicht sein. Neue Effekte wie Ordr Jump wären kein Problem, ich kann ja bei den Effekten sämtliche Buchstaben und Zahlen eingeben. Nur abspielen würde er sie dann halt nicht.
Ich fände es jetzt wichtig, erst einmal eine funktionierende PIS Unit zu haben, und der im nächsten Schritt Stereo und 8 Wellenformen zu verpassen.
Dann kann man etwas optimieren und evtl. mehr ergänzen, oder was meinst Du?

Wie ist das bei Dir mit dem Tracker, möchtest Du den benutzen? Dann setz ich mich dran und schreibe den fix um, sodass die EXE auch unter DosBox läuft.
Ein bisschen DOS kann oft mehr als ein Haufen Fenster.

Gigabyte GA-586HX, P54C 100@75MHz, 24MB RAM, AVGA3-22-1M ISA, RTL8029AS PCI, Goldstar Prime 2 ISA, MA5ASOUND, Dreambl. X2 DB, HD 4x2GB, 48x CD, 3,5" Floppy, 2xRS232, 1xPar., PS/2 Maus
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von zatzen »

Ordr Jump meinte ich weniger als Effekt als vielmehr vom Programm steuerbar, also z.B. vom Spielverlauf abhängig. In den Patterns als Effekt definierte Jumps würden ja letztlich nur zu einem linearen Abspielvorgang führen, den man dann auch ohne die Jumps in der Ordr bestimmen kann.
Ich würde mich was das Interpretieren der Effektdaten angeht erstmal nur ans Original halten, Erweiterungen würde ich Dir dann überlassen. Auch Stereo und 8 Wellenformen sind so ein Ding, wo ich gerade nicht so drinstecke. Ich würde mich eben erstmal um diese ganzen neuen Speicherauslegungen kümmern.

Du musst Dir wegen mir erstmal keine Mühe mit dem Tracker machen, ich benutze andere Tracker (X-Tracker und Renoise) um ernsthaft Musik zu machen. Die sind Sample-basiert bzw. unterstützt Renoise auch VST Instrumente. Vielleicht wird BT aber einmal interessant wenn ich ein Spiel mit AdLib Musik machen möchte.

Ich habe gerade schonmal die Assembler Routinen für die Pattern-Zeileninfos geschrieben, also ob eine Zeile genutzt wird oder nicht, zum komprimierten Ablegen der Daten im Speicher, und dass sie auch so komprimiert in Echtzeit gelesen werden können. Ich kann hier zwischendrin immer mal Code posten, aber ich weiss nicht ob das von Interesse ist, vielleicht aber zum verstehen von Pascal und Assembler.
mov ax, 13h
int 10h

while vorne_frei do vor;
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von zatzen »

Thomas hat geschrieben: Ich fände es jetzt wichtig, erst einmal eine funktionierende PIS Unit zu haben, und der im nächsten Schritt Stereo und 8 Wellenformen zu verpassen.
Dann kann man etwas optimieren und evtl. mehr ergänzen, oder was meinst Du?
Ich will die Sache auch nicht unnötig hinauszögern, aber das direkte Lesen vom Heap und dass die Daten dort komprimiert und nicht aufgeblasen wie Schaum herumliegen ist schon eine große Motivation für mich, das ganze überhaupt zu machen. Vielleicht brauche ich 1-2 Wochen, je nachdem wieviel Zeit ich finde und wie gut ich vorankomme.
mov ax, 13h
int 10h

while vorne_frei do vor;
Benutzeravatar
Thomas
DOS-Kenner
Beiträge: 426
Registriert: Mi 22. Jun 2016, 12:29
Wohnort: Nähe von Limburg / Lahn

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von Thomas »

OK, super.
Naaa, ich wollte Dir den Beni Tracker jetzt nicht aufdrücken um ernsthaft Musik zu machen. Das meine ich durchaus herausgelesen zu haben dass Du da etwas professioneller unterwegs bist. Nein, vielleicht zum testen, ausprobieren, PIS Dateien ändern, etc. Ich selber mache damit ja auch nur Musik für meine (naja, bisher nur eins) Spiele.
Naja, halte uns auf dem Laufenden.
Ein bisschen DOS kann oft mehr als ein Haufen Fenster.

Gigabyte GA-586HX, P54C 100@75MHz, 24MB RAM, AVGA3-22-1M ISA, RTL8029AS PCI, Goldstar Prime 2 ISA, MA5ASOUND, Dreambl. X2 DB, HD 4x2GB, 48x CD, 3,5" Floppy, 2xRS232, 1xPar., PS/2 Maus
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von zatzen »

Ja, Du hast recht. Es wäre hilfreich wenn ich einen Beni Tracker hätte der in Dosbox funktioniert, allein schon damit ich vergleichen kann wie die Musikstücke in dem spielen und in meiner Portierung. Daran hatte ich jetzt gar nicht gedacht.
mov ax, 13h
int 10h

while vorne_frei do vor;
Benutzeravatar
Thomas
DOS-Kenner
Beiträge: 426
Registriert: Mi 22. Jun 2016, 12:29
Wohnort: Nähe von Limburg / Lahn

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von Thomas »

Alles klar, wird erledigt. Aber ob ich heute noch viel machen kann weiß ich nicht. Dienstags ist Serienabend mit der Frau.
Ein bisschen DOS kann oft mehr als ein Haufen Fenster.

Gigabyte GA-586HX, P54C 100@75MHz, 24MB RAM, AVGA3-22-1M ISA, RTL8029AS PCI, Goldstar Prime 2 ISA, MA5ASOUND, Dreambl. X2 DB, HD 4x2GB, 48x CD, 3,5" Floppy, 2xRS232, 1xPar., PS/2 Maus
Benutzeravatar
Thomas
DOS-Kenner
Beiträge: 426
Registriert: Mi 22. Jun 2016, 12:29
Wohnort: Nähe von Limburg / Lahn

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von Thomas »

Fertiges Kompilat langt Dir? Oder magst meine erweiterte Version auch als sourcen? DirectQB auch Mal? Sind sämtliche Libs als ASM source dabei. Vielleicht kannst Du da noch was für Pascal abgucken?!
Ein bisschen DOS kann oft mehr als ein Haufen Fenster.

Gigabyte GA-586HX, P54C 100@75MHz, 24MB RAM, AVGA3-22-1M ISA, RTL8029AS PCI, Goldstar Prime 2 ISA, MA5ASOUND, Dreambl. X2 DB, HD 4x2GB, 48x CD, 3,5" Floppy, 2xRS232, 1xPar., PS/2 Maus
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von zatzen »

Ja, Sources dabei können nicht schaden, aber Kompilat wäre schon gut.
Ich habe mich heute den Laderoutinen gewidmet, in besagter komprimierter Form.
Muss noch etwas debuggt werden, dann kann es weitergehen.
mov ax, 13h
int 10h

while vorne_frei do vor;
Benutzeravatar
Thomas
DOS-Kenner
Beiträge: 426
Registriert: Mi 22. Jun 2016, 12:29
Wohnort: Nähe von Limburg / Lahn

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von Thomas »

Guten Morgen Zatzen.
Ich fürchte ich habe mich da mit den Tracker etwas weit aus dem Fenster gelehnt. Ich habe alle peeks und pokes (denke ich) auf die EMS Routinen von DirectQB umgelegt aber dennoch läuft der Tracker nicht in der Dosbox. Bei mir stürzt er aber nur beim Laden und Speichern ab. Der Autor hat da Interrupt calls vom DOS INT 21 drin. Vielleicht liegt da das Problem dass die nicht vollständig von Dosbox unterstützt werden?!
Ein bisschen DOS kann oft mehr als ein Haufen Fenster.

Gigabyte GA-586HX, P54C 100@75MHz, 24MB RAM, AVGA3-22-1M ISA, RTL8029AS PCI, Goldstar Prime 2 ISA, MA5ASOUND, Dreambl. X2 DB, HD 4x2GB, 48x CD, 3,5" Floppy, 2xRS232, 1xPar., PS/2 Maus
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von zatzen »

Hallo Thomas!
Wichtig ist, dass die Basic-Player-Routine funktioniert und wir sie als Referenz nehmen können.
Bisher bilde ich ja nur das nach, was ich dem Format und dem Basic-Programm (BTPLAY18) entnehme.
mov ax, 13h
int 10h

while vorne_frei do vor;
Benutzeravatar
Thomas
DOS-Kenner
Beiträge: 426
Registriert: Mi 22. Jun 2016, 12:29
Wohnort: Nähe von Limburg / Lahn

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von Thomas »

Ich habe die Playerroutine in BASIC mit CMD Parameter, also einen eigenständigen Textplayer sozusagen. Du könntest jetzt natürlich mit einem Hexeditor in einem Pis herum pfuschen und dann das Ergebnis anhören. Die Playerroutine läuft bei mir definitiv in Dosbox. Ich schaue dennoch weiter nach. Vielleicht habe ich auch nur einen Peek Block irgendwo übersehen. Mit dem DOS INT lag ich auch falsch. Der kommt im ganzen BAS nur einmal vor und dient dazu einen Interrupt Vektor zu bekommen. Erschwerend finde ich die vielen DEF SEGs. Er schreibt immer direkt in den Textspeicher bei B800. Aber ein Absturz kommt ja nur beim Laden und Speichern Dialog. Das werde ich nochmal Schrittweise durch gehen. Angefangen bei den Tastendrücken (F4 und F5). Möglich wäre auch noch dass eine Weitere Sub/Function in den EMS schreibt, er da aber kein DEF SEG = emsseg drin hat weil das im Ablauf ohnehin vorher in Hauptmodul oder einer vorhergehenden Sub gesetzt wird.

Nachtrag:
Ich weis jetzt warum der Tracker nicht will aber noch nicht wie ich es löse... Schuld ist der Dateirequester. (Als Untermodul "BENIREQ2.BAS" im BT18.BAS) Der überliefert einen falschen Pfad unter DosBox, wieso auch immer... Starte mal "BT18 NOFILEREQ". Dann musst Du aber die Dateinamen händisch eingeben beim Laden und Speichern. Und die PIS sollten im selben Verzeichnis liegen wie BT18, da man nicht sehr viele Zeichen als Dateinamen eingeben kann.
Ein bisschen DOS kann oft mehr als ein Haufen Fenster.

Gigabyte GA-586HX, P54C 100@75MHz, 24MB RAM, AVGA3-22-1M ISA, RTL8029AS PCI, Goldstar Prime 2 ISA, MA5ASOUND, Dreambl. X2 DB, HD 4x2GB, 48x CD, 3,5" Floppy, 2xRS232, 1xPar., PS/2 Maus
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Beitrag von zatzen »

Tatsächlich!
Jetzt funktioniert der Tracker und läuft flüssig in meiner 20000 Cycles Dosbox.
Klingt schön (höre ZELDNI.PIS). Mit dem Eintippen kann ich erstmal leben.

Mit dem Code bin ich soweit durch, jetzt werde ich ersteinmal noch ein paar Trockenübungen machen. Sicherstellen dass die Patterns richtig aus dem komprimierten Speicher eingelesen werden, und dann den Tracker erstmal mit delay(20) timen bevor ich die Play-Routine auf den Timer Interrupt setze.

Der Abspielcode erschien mir unheimlich redundant, vielleicht kann man am Ende nachverfolgen was genau passiert, und dann eine optimale Abspielroutine "from scratch" schreiben, ohne diese elendigen IF-Kaskaden.


Übrigens, zum Thema Speicher freigeben nach Programmende: Aller mit GetMem reservierter Speicher wird nach Beendigung freigegeben. Trotzdem kann eine Timer-Routine die man nicht beendet nach Programmende die Musik noch weiterspielen, solange der Speicher auf den sie zugreift nicht überschrieben wurde.
mov ax, 13h
int 10h

while vorne_frei do vor;
Antworten