Allgemeine Hilfestellung zum Programmieren unter DOS gesucht

Diskussion zum Thema Programmierung unter DOS (Intel x86)
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 Abend Zatzen.
Ich war die Tage etwas in Eile und habe die Mails schon gelöscht. Jetzt finde ich die BTPLAY9A.PAS nicht mehr. Könntest Du mir die aktuellste Version nocheinmal zukommen lassen?
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, machen wir das dann doch einfach hier im Forum.

http://www.zatzen.net/btplay9a.zip

Da Du die Version 9 die ich geschickt hatte nicht findest, hier diese direkt schon ein bisschen weiterentwickelt.
Da ist auch schon die Änderung berücksichtigt die ich in meinem vorherigen Post beschrieben habe.

Die Player-Routine ist im Moment noch ein Zwitter aus Pascal und Assembler, da ich erst ca. 1/4 in ASM übersetzt habe.

Falls Du noch irgendwelche Fehler entdeckst wäre es nett wenn Du mir Bescheid sagst.
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 »

Sehr gut.
Ich habe aber deinen fix von oben Mal mit der 0.8 getestet. Der Fehler war nach wie vor da aber du sagtest ja das läge an einer Debugroutine die du ja erst in 0.9 raus genommen hast.
Ich teste umgehend, aber wohl erst heute Abend.
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 »

Der Fehler mit den Strings in der 0.8 lag an etwas anderem, trat immer auf wenn man zwei gleiche Patterns in einem Ordr hatte, außer Null-Patterns.

In der 0.9 habe ich aber auch noch Flüchtigkeitsfehler entdeckt, daher hier mal die 0.10: http://www.zatzen.net/btply10a.zip
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.
Also, sowohl 0.9 als auch 0.10 arbeiten jetzt weitestgehend fehlerfrei. Es werden lediglich hin und wieder einzelne Noten nicht gespielt. Sicher weiß ich es wieder in Pos 09. Da fehlt zweimal eine Note im Bass und sporadisch Mal eine snare, überwiegend am Patternende wo die sich schnell wiederholen.
Genaue Zeilenangaben kann ich beim Bass leider noch nicht machen. Ich kämpfe nebenher noch mit meinem NAS Server.
Vielleicht bin ich da aber auch etwas zu pedantisch weil ich den Track in und auswendig kenne. Jemandem der es noch nie gehört hat, fällt es wohl möglich gar nicht auf.
Wenn Du jetzt aber alles in ASM umschreibst, weiß ich nicht ob ich dann die Erweiterungen für den Pseudo OPL3 Mode so einfach implementiert bekomme. Aber ich glaube If Abfragen in ASM umsetzen kann ich mittlerweile auch ganz gut. Schauen wir Mal.
Ach ja, danke für das Kompliment zum Track. Ich selbst finde den eher simpel. Aber ich bin auch kein großer Komponist
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!
Ich überprüfe das mit den ausgelassenen Noten mal genau, es ist mir auch wichtig dass alles korrekt gespielt wird, auch wenn es nur Feinheiten sind.
Wenn ich die Sache kompiliere merke ich schon dass das Kompilat deutlich kleiner wird durch das Ersetzen der IF-Kaskaden und Pascal-Stil Berechnungen durch Assembler, das lohnt sich also durchaus, da weniger Kompilat ja auch weniger Instruktionen und somit mehr Geschwindigkeit bedeutet. Nun wird es aber darauf hinauslaufen, dass praktisch alles bis auf die Laderoutine in Assembler geschrieben sein wird, also Pascal Code fast nur noch als ein Gerüst übrig bleibt. Das mag dann für Dich mit wenig Assembler Erfahrung sehr unübersichtlich sein.
Deswegen wollte ich Dich mal fragen, was für Änderungen müssen denn für Pseudo OPL3 gemacht werden? Hast Du den Tracker dahingehend auch schon umgeschrieben, also eine spezielle Version gemacht?
Vielleicht müssen nur ein paar Arrays erweitert, Variablen angepasst und ein klein wenig Code verändert werden.
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 »

Komisch, bei mir spielt Version 10a die pos 9 korrekt, der Bass spielt durch, und die Snares sind komplett. Woran das jetzt liegen mag... Entweder stimmt noch was mit der Speicherauslegung nicht, oder die OPL Ansteuerung braucht vielleicht noch mehr Dummy-Lesezugriffe... Letzteres halte ich aber für unwahrscheinlich.
Was Du mal versuchen kannst, das Stück von Anfang an bis zur Pos 9 spielen, oder direkt bei Pos 9 beginnen, ob sich da ein Unterschied ergibt, das könnte Licht ins Dunkel bringen.
Ich habe das alles aber auch in DosBox laufen. Wenn Du es auf einem nativen System laufen hast, wäre hilfreich zu wissen wie es sich in DosBox verhält.
Die Patterndaten werden jedenfalls korrekt dekodiert, daran liegt es nicht.
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 »

Ich habe hier nochmal Version 10, aber ich habe die Pascal IF-Kaskaden wieder reingemacht.
http://www.zatzen.net/btp_test.zip
Wenn es damit fehlerfrei funktioniert habe ich wahrscheinlich irgendwo in den Assembler-Routinen einen Bug.
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 »

Naja, das mit den Pseudo OPL3 gestaltet sich NICHT wirklich kompliziert. Es gibt eine Config Datei in der neben Sound Adresse, IRQ und DMA auch ein Wert "SoundMode" ausgelesen wird. 0 = keine Musik, 1 = OPL2 Karte und 2 = OPL3
Dementsprechend wird am Programmstart, bzw in meinem Spiel in der InitEngine *hüstel* Routine, eben das Register für OPL3 Erweiterungen Gesetzt oder eben nicht. Desweiteren decodiert ein CASE wenn OPL3 gesetzt ist, die Kanäle in Stereo. Ch0=links, Ch1=rechts, Ch2=L, Ch3=R, Ch4 - Ch8=Mitte. Letzteres geschiet innerhalb OPL_Out. Wenn gesetzt, wird natürlich nach Programmende wieder nach OPL2 umgeschaltet, da das der Standard Modus ist und viele Spiele den einfach vorraussetzen dass er gesetzt ist. Also neuere Spiele die OPL3 auch unterstützen aber mit AdLib dann seltsame Töne produzieren.
Kann mir auch nicht vorstellen dass es an den Registerwaits liegt. Zumal die beim OPL3 zu vernachlässigen sind. Desweiteren haben wir die doch nach original AdLib Empfehlung drin. 6xstatusreg lesen nach RegWrite und 36 Mal Statusreg lesen nach DataWrite.
Zuletzt geändert von Thomas am Mo 3. Feb 2020, 20:50, insgesamt 2-mal geändert.
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 »

Ich habe die OPL_OUT aus dem Beni Tracker übernommen, mit entsprechend weniger Status reads.
Aber daran liegt es wohl nicht.
Tatsächlich habe ich gerade in den ASM Routinen noch Fehler entdeckt. Falsche Speicheradressierung, bei mir liegen dort dann offenbar zufällig Daten, so dass es funktioniert. Dann müsste die Version BTP_TEST bei Dir aber funktionieren, kannst Du ja mal ausprobieren.
Die Stereo-Decodierung lässt sich in ASM sehr einfach über eine Sprungtabelle lösen, bzw. die ersten 4 Kanäle auch einfach zuordnen indem man sie mit AND 1 verknüpft.
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 »

Ich habe da noch eine Frage, um den Fehler einzugrenzen: Trat das mit den fehlenden Noten auch bei Version 9 auf oder nur bei 10? In Version 9 wird nämlich nur eine Assembler-Routine verwendet, die von Deinem Musikstück gar nicht angefordert wird (nur bei Effekt 3, Tone Portamento).
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 »

Hallo Zatzen.
Ich bin wirklich verwirrt... Unter DOS-Box laufen 08a - 10a fehlerlos. Auch btp_test. Auf dem nativen System sieht es jetzt so aus:
09a: nichts wirklich feststellen können. Evtl. eine winzige unsauberheit in den Snares am Patternende.
10a: Kein fehlender Bass aber sporadische "quietsch" Töne an unterschiedlichen Positionen, nicht reprodizierbar.
btp: wie 10a jedoch seltener.

Liegt es am Speicher, ist der evtl. defekt? Oder an der Soundkarte... Kann aber zeitlich momentan nicht wechseln, sorry. Das native System ist ein 486er Opti VL System mit DX/2 66, Karte ist eine Shuttle HOT-223 mit Opti 928 und original YMF262.

Die Wartezeiten, also Statusreads würde ich nicht kürzen. Die sind im Benitracker schon viel zu kurz. Du musst daran denken dass ein zukünftiges Spiel evtl. auch mal auf einem System mit original YM3812 gespielt wird. Ich habe eine Karte mit dem Chip und wenn wir bei der V1.0 angelangt sind, werde ich die auch mal darauf testen. Was ich wohl aber machen würde, was ich bei meiner Pseudo-OPL3 Abfrage auch berücksichtige: Wird der Modus auf OPL3 gesetzt, so werden die Waitstates in OPL_Out nicht ausgeführt. Ach ja, die Variable hieß auch SynthType, nicht SoundMode.
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 »

Wenn bei der reinen Pascal-Version auch falsche Töne drin sind, dann liegt es vielleicht eben doch an zu kurzen OPL Wartezeiten. Ich ändere das mal auf die empfohlenen Werte und gebe Dir eine neue BTP_TEST, BTP_TST2 nenn ich die... Bis gleich
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 »

Hier ist die Version mit 6x und 36x Statusregister lesen: http://www.zatzen.net/btp_tst2.zip
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 »

Meinst du es liegt tatsächlich nur an realer/emulierter Hardware? Dosbox habe ich auf dynamic CPU mit 20000 fixen cycles und oplemu auf compat.
Normalerweise schluckt der OPL3 das weg. Wie gesagt, in meinem Spiel habe ich null Wartezeit im OPL3 Mode. Ich probiere es gleich nochmal.
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
Antworten