06.09.2021, 02:34
(Dieser Beitrag wurde zuletzt bearbeitet: 06.09.2021, 05:36 von Traxx Amiga EP.)
0
(05.09.2021, 19:04)lopez72 schrieb: ich gebe zu ich versteh dich nicht, ich bin kein informatik nerd, oder ein programmierer, ich habe keine ahnung was du mit CMD meinst
und außerdem versteh ich nicht was du meinst mit "über der CMD mit Dosbox -conf "Mad-News.conf"
somit, es tut mir leid, aber könntest du es entweder etwas detalierter beschrieben ,screenshots machen oder ein video, oder dein dosbox ordner etc, weil so komme ich leider nicht weiter, oder ich sehe den wald vor lauter bäumen nicht, da ich seit 5 stunden schon wieder heute an dem problem sitz
danke für deine zeit!
So. Ausgeschlafen,
Ich habe dir wat hochgeladen. Datei von filehorst.de laden
knapp 260mb gross.
Interessant. Normal bin ich immer derjenige der mit Abkürzungen überfordert ist vorallem wen diese aus der Tik Tok/Whatsapp etc.. scene kommen. Bin auch kein Informatiker.
Also CMD = Commandline aka "Eingebaufforderung"
Mal sehen wie ich dir dat erkläre. .... Dosbox-X, Daum oder meine Version nutzen ein zusätzlichen IDE Atapi Code für das funktionieren der CD-DROM/Festplatten. Quasi eine erweiterung zu den der Standard, ECE. Der IDE Code wird auch benötigt um in Dosbox unter Windows 95/98 das CDRom einzubinden. Um Audio Daten abzuspielen greift der Code auf die Funktion
Code:
bool CDROM_Interface_Image::GetAudioSub(unsigned char& attr, unsigned char& track, unsigned char& index, TMSF& relPos, TMSF& absPos)
{
int cur_track = GetTrack(player.currFrame);
if (cur_track < 1) return false;
track = (unsigned char)cur_track;
attr = tracks[track - 1].attr;
index = 1;
FRAMES_TO_MSF(player.currFrame + 150, &absPos.min, &absPos.sec, &absPos.fr);
FRAMES_TO_MSF(player.currFrame - tracks[track - 1].start + 150, &relPos.min, &relPos.sec, &relPos.fr);
#ifdef DEBUG
LOG_MSG("%s CDROM: GetAudioSub attr=%u, track=%u, index=%u", get_time(), attr, track, index);
LOG_MSG("%s CDROM: GetAudioSub absoute offset (%d), MSF=%d:%d:%d",
get_time(),
player.currFrame + 150,
absPos.min,
absPos.sec,
absPos.fr);
LOG_MSG("%s CDROM: GetAudioSub relative offset (%d), MSF=%d:%d:%d",
get_time(),
player.currFrame - tracks[track - 1].start + 150,
relPos.min,
relPos.sec,
relPos.fr);
#endif
return true;
}
So, da siehst du z.b das Schlüsselwort "FRAMES_TO_MSF". "player.currFrame" ist der jetzige -und Start zeitpunkt für das übertragen der Audui Daten. Die Nummer 150 gibt den Anfang an. Wenn Dosbox nun startet und das Spiel abspielt wird die CUE oder das CHD Image eingebunden.
Code:
TRACK:1 TYPE:MODE1_RAW SUBTYPE:NONE FRAMES:4231 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0
TRACK:2 TYPE:AUDIO SUBTYPE:NONE FRAMES:17524 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0
TRACK:3 TYPE:AUDIO SUBTYPE:NONE FRAMES:34339 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0
TRACK:4 TYPE:AUDIO SUBTYPE:NONE FRAMES:14536 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0
TRACK:5 TYPE:AUDIO SUBTYPE:NONE FRAMES:22545 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0
TRACK:6 TYPE:AUDIO SUBTYPE:NONE FRAMES:20223 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0
TRACK:7 TYPE:AUDIO SUBTYPE:NONE FRAMES:27110 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0
TRACK:8 TYPE:AUDIO SUBTYPE:NONE FRAMES:18358 PREGAP:0 PGTYPE:MODE1 PGSUB:NONE POSTGAP:0
Man Achte auf den 1sten Track. Der hat eine Länge von "4231". Dosbox versucht nun aber ab "150" abzuspielen. Resultat: Kein Sound oder man hört das Rauschen des Daten Track. Warum das nun bei Madnews so ist das keine Musik abgespielt wird und bei anderen Spielen schon liegt wohl an der Weitergabe von Atapi Codes an das DOS System bzw (MSCDEX).
Nach ein bissel Recherche wird der opcode 0xbe für ReadCD übergegeben.
Standard ist ReadCD(10) oder ReadCD(12). 0xbe fehlt auch im IDE Code und fängt diesen unbekannte opCode als Fehler ab.
Wie OpCode 0xBE implentiert wird wüsse ich auch nicht. Müsse man sich tiefer in dei Materie einlesen.
Die Alernative sichere Lösung wäre dann eigentlich das der Startpunkt genau nach 4231 ist. Denn dann fängt der Audio Track an und man hört Musik. Wiso die Entwickler 150 nutzen habe ich mich schon damals gefragt....
Ich hatte das so abgefangen. Bei CUE/BIN: Wenn es eine AUDIO ist, Track 2, Attribute ist 0, Startlänge länger als 0 und als bool wurde noch nicht benutzt. nehme diese Lange.
Bei CHD ähnlich und übergebe das Resultat in die CDROM_Interface_image::GetAudioSub Routine
Code:
bool CDROM_Interface_Image::GetAudioSub(unsigned char& attr, unsigned char& track, unsigned char& index, TMSF& relPos, TMSF& absPos)
{
int cur_offset;
int cur_track = GetTrack(player.currFrame);
if (cur_track < 1) return false;
track = (unsigned char)cur_track;
attr = tracks[track - 1].attr;
index = 1;
cur_offset = 150; // Belasse den standardwert
// GEÄNDERT
if ( ImageTrack.offset > 0 && ImageTrack.attr == 0 && ImageTrack.used == true )
{
cur_offset = ImageTrack.offset + cur_offset;
ImageTrack.used = false;
LOG_MSG("CDROM: GetAudioSub Start Offset base (%d)",cur_offset);
}
FRAMES_TO_MSF(player.currFrame + cur_offset, &absPos.min, &absPos.sec, &absPos.fr);
FRAMES_TO_MSF(player.currFrame - tracks[track - 1].start + cur_offset, &relPos.min, &relPos.sec, &relPos.fr);
#ifdef DEBUG
LOG_MSG("%s CDROM: GetAudioSub attr=%u, track=%u, index=%u", get_time(), attr, track, index);
LOG_MSG("%s CDROM: GetAudioSub absoute offset (%d), MSF=%d:%d:%d",
get_time(),
player.currFrame + cur_offset,
absPos.min,
absPos.sec,
absPos.fr);
LOG_MSG("%s CDROM: GetAudioSub relative offset (%d), MSF=%d:%d:%d",
get_time(),
player.currFrame - tracks[track - 1].start + cur_offset,
relPos.min,
relPos.sec,
relPos.fr);
#endif
return true;
}
Funktioniert. Ob das alles so richtig ist .... no idea. Ich mach das Blind ohne Live Debug wie man es von Visual Studio kennt. läuft alles bei mir im kop ab. Echt krank ich weiß....
Unter Windows 7 und Windows 10 getestet
Wie dem auch sei ... alles nichts wichtiges
Was das angeht wie lange man an ein prob hängt kenn isch. Das längste war bei mir knapp 8 tage.
grüsse