Alexander (HH): MS-DOS 6.22 auf "schneller" CPU: Divide Overflow?

Moin Moin!

Ich schlag mich gerade damit herum, ein altes Embedded-System mit einem Mobile Celeron (400 MHz, CPU Family 6, Modell 11, Stepping 4, 256 KByte Cache) wieder brauchbar zu machen. Dafür brauche ich ein proptitäres Tool, um zerkonfigurierte Hardware wieder "einzurenken", dass blöderweise nur unter "nacktem" DOS läuft und zu allem Überfluß auch noch einen eigenen DOS-Extender mitschleppt.

MS-DOS 6.22 zerreißt es aber noch während des Bootens mit einem Divide Overflow (bzw. "Überlauf bei Division"). Device-Treiber werden noch geladen, aber INSTALL= in der Config.SYS wird schon nicht mehr ausgeführt. Eine bis auf FILES=, BUFFERS=, LASTDRIVE= und SHELL= komplett auskommentierte CONFIG.SYS hat den selben Effekt, die Device-Treiber sind also nicht die Ursache.

Das riecht für mich nach dem Microsoft-Equivalent von Borlands berüchtigtem Runtime Error 200 auf CPUs > 100 MHz. Gibt's da irgendwelche Bugfixes / Workarounds?

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  1. Hallo,

    Ich schlag mich gerade damit herum, ein altes Embedded-System mit einem Mobile Celeron (400 MHz, CPU Family 6, Modell 11, Stepping 4, 256 KByte Cache) wieder brauchbar zu machen. Dafür brauche ich ein proptitäres Tool, um zerkonfigurierte Hardware wieder "einzurenken", dass blöderweise nur unter "nacktem" DOS läuft und zu allem Überfluß auch noch einen eigenen DOS-Extender mitschleppt.

    und dieses System ist auf DOS 6.22 festgelegt?

    MS-DOS 6.22 zerreißt es aber noch während des Bootens mit einem Divide Overflow (bzw. "Überlauf bei Division"). [...]
    Das riecht für mich nach dem Microsoft-Equivalent von Borlands berüchtigtem Runtime Error 200 auf CPUs > 100 MHz.

    Aber sowas von.

    Gibt's da irgendwelche Bugfixes / Workarounds?

    Ich würd's mit einem DOS 7.1 versuchen, das mit Windows 98 ausgeliefert wird. Das läuft nach meiner Erfahrung sogar auf Rechnern der 3GHz-Klasse. Nur mit Festplatten >128GB kann es nicht korrekt umgehen.

    Ciao,
     Martin

    --
    Lebensmotto der Egoisten:
    Was ist so schlimm daran, dass jeder nur an sich selbst denkt? Dann ist doch an alle gedacht!
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Moin Moin!

      und dieses System ist auf DOS 6.22 festgelegt?

      Nö, ursprünglich lief da ein völlig umgesticktes BSD drauf. Das Tool stammt von einem Zulieferer, das will nur DOS, nicht zwingend 6.22, wahrscheinlich reicht alles nach 3.3 oder 4.01.

      MS-DOS 6.22 zerreißt es aber noch während des Bootens mit einem Divide Overflow (bzw. "Überlauf bei Division"). [...]
      Das riecht für mich nach dem Microsoft-Equivalent von Borlands berüchtigtem Runtime Error 200 auf CPUs > 100 MHz.

      Aber sowas von.

      War ja klar ... *grummel*

      Gibt's da irgendwelche Bugfixes / Workarounds?

      Ich würd's mit einem DOS 7.1 versuchen, das mit Windows 98 ausgeliefert wird. Das läuft nach meiner Erfahrung sogar auf Rechnern der 3GHz-Klasse.

      Da bin ich gerade bei, blöderweise ist das BIOS extrem kastriert und crasht z.B., wenn man Funktionen des INT 0x17 (Printer) aufruft. Genau den ruft DOS beim Starten auf, um angeschlossene Drucker zu resetten. Also muß ich erstmal das DOS (IO.SYS) umpatchen, damit es die Finger vom INT 0x17 läßt. Es lebe Closed Source!

      (Und bevor jemand mit FreeDOS kommt: Ja, FreeDOS ist Open Source. Aber nein, FreeDOS ist nicht lustig. Gruselig trifft es eher. Akut ist es weniger schmerzhaft, IO.SYS umzupatchen als FreeDOS zu compilieren.)

      Nur mit Festplatten >128GB kann es nicht korrekt umgehen.

      Im Moment spiele ich mit 1,5 GByte, damit kommt auch DOS 6.22 noch klar. Später wird's eine 40 GByte-Platte werden. Dann werde ich DOS aber nicht mehr brauchen.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
      1. Moin Moin!

        Ich würd's mit einem DOS 7.1 versuchen, das mit Windows 98 ausgeliefert wird. Das läuft nach meiner Erfahrung sogar auf Rechnern der 3GHz-Klasse.

        Da bin ich gerade bei,

        Das Programm verursachte einen Überlauffehler.
        Wenn der Fehler erneut auftritt, wenden Sie sich an den Hersteller.

        Unhandled real mode interrupt!
        Vector: 0x00000005
        CS:IP = 020C:EF19
        SS:ESP = DD5C:F023
        EAX = EC8D  EBX = 8B4F  ECX = 8B52  EDX = 2055
        ESI = 6C75  EDI = 7401  EBP = C465  FLG = 7202
        DS  = E885      ES =  FFFE      FS  = 0000      GS  = 0000
        Stack:
           C5E3: FFFE 5752 FEE4 E852
           C5F3: FFFF FEDC 8B51 8B52
           C603: 8B51 FFFE 9CE8 8BFF
           C613: FFFE E08D 89FF FFFE

        Danke, danke, danke!

        Win98SE raucht schon ab, bevor der erste Gerätetreiber geladen wird. Dafür schmeißt mir das BIOS einen wunderhübschen Dump vor die Füße.

        Das macht die Kiste doch mit Absicht! ;-)

        Naja, versuch' ich morgen mein Glück mal mit Novell DOS und FreeDOS. Und vielleicht noch ein paar anderen Clones. Irgendeiner muß ja mal booten.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
        1. Moin aber auch ...

          Ich würd's mit einem DOS 7.1 versuchen, das mit Windows 98 ausgeliefert wird. Das läuft nach meiner Erfahrung sogar auf Rechnern der 3GHz-Klasse.
          [...]
          Das Programm verursachte einen Überlauffehler.
          Wenn der Fehler erneut auftritt, wenden Sie sich an den Hersteller.

          autsch - das muss dann aber noch an anderen unüblichen Eigenheiten eben dieses Rechners liegen. Bisher lief eben dieses DOS 7.1 bei mir noch auf *jedem* Rechner als rudimentäres Minimalsystem.
          Aus der nachfolgenden Beschreibung entnehme ich, dass es hier aber nicht (oder nicht mehr) um "Division by Zero" oder "Division Overflow" geht, sondern um eine fehlgeschlagene Bereichsüberprüfung.

          Unhandled real mode interrupt!
          Vector: 0x00000005

          INT 05, wofür war der nochmal gut? Der wird bei einer fehlgeschlagenen BOUNDS-Anweisung ausgelöst (ab 80286). Hmm. Woher soll das wohl kommen? Hat vielleicht der Arbeitsspeicher eine Macke ...?
          Dass der Interrupt-Vektor für INT 05 offensichtlich ins Nirwana zeigt, finde ich auch noch ziemlich seltsam. Normalerweise wird der von DOS so gesetzt, dass er auf die PrtScr-Routine zeigt. Kommt dieser brutale Fehler noch während des Bootvorgangs, wo diese Initialisierungen möglicherweise noch nicht abgeschlossen sind?

          Win98SE raucht schon ab, bevor der erste Gerätetreiber geladen wird. Dafür schmeißt mir das BIOS einen wunderhübschen Dump vor die Füße.

          Das BIOS?? Das macht höchstens der DOS-Extender EMM386.EXE, der den V86-Mode initiiert und steuert. Dass das BIOS sowas tut, wäre mir neu.

          Das macht die Kiste doch mit Absicht! ;-)

          Natürlich. ;-)

          Naja, versuch' ich morgen mein Glück mal mit Novell DOS und FreeDOS. Und vielleicht noch ein paar anderen Clones. Irgendeiner muß ja mal booten.

          Good luck,
           Martin

          --
          Kopflosigkeit schützt nicht vor Migräne.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Moin Moin!

            Ich würd's mit einem DOS 7.1 versuchen, das mit Windows 98 ausgeliefert wird. Das läuft nach meiner Erfahrung sogar auf Rechnern der 3GHz-Klasse.
            [...]
            Das Programm verursachte einen Überlauffehler.
            Wenn der Fehler erneut auftritt, wenden Sie sich an den Hersteller.

            autsch - das muss dann aber noch an anderen unüblichen Eigenheiten eben dieses Rechners liegen. Bisher lief eben dieses DOS 7.1 bei mir noch auf *jedem* Rechner als rudimentäres Minimalsystem.

            Jaja, die Kiste ist nicht gerade ein gewöhnlicher PC. Das fängt schon damit an, dass nicht einmal Spuren einer Grafikkarte vorhanden sind. Tastatur- und Mausanschluß gibt's auch nicht, wenn man etwas von der Kiste will, hat man sich mit 9600/8N1 an COM1 zu melden.

            Aus der nachfolgenden Beschreibung entnehme ich, dass es hier aber nicht (oder nicht mehr) um "Division by Zero" oder "Division Overflow" geht, sondern um eine fehlgeschlagene Bereichsüberprüfung.

            Unhandled real mode interrupt!
            Vector: 0x00000005

            INT 05, wofür war der nochmal gut? Der wird bei einer fehlgeschlagenen BOUNDS-Anweisung ausgelöst (ab 80286). Hmm. Woher soll das wohl kommen?

            Will ich gar nicht wissen.

            Hat vielleicht der Arbeitsspeicher eine Macke ...?

            Definitiv nicht, Linux läuft nämlich ganz prima, und das ursprüngliche System auch. Speicherfehler wären im früheren Leben des Systems definitiv sehr schnell (und sehr unangenehm) aufgefallen.

            Dass der Interrupt-Vektor für INT 05 offensichtlich ins Nirwana zeigt, finde ich auch noch ziemlich seltsam.

            Nicht ins Nirvana, auf eine "Faß mich nicht an"-Routine im BIOS.

            Normalerweise wird der von DOS so gesetzt, dass er auf die PrtScr-Routine zeigt.

            Nö, das macht schon das BIOS (auch bei normalen PCs).

            Kommt dieser brutale Fehler noch während des Bootvorgangs, wo diese Initialisierungen möglicherweise noch nicht abgeschlossen sind?

            Ja.

            Win98SE raucht schon ab, bevor der erste Gerätetreiber geladen wird. Dafür schmeißt mir das BIOS einen wunderhübschen Dump vor die Füße.

            Das BIOS?? Das macht höchstens der DOS-Extender EMM386.EXE, der den V86-Mode initiiert und steuert. Dass das BIOS sowas tut, wäre mir neu.

            Wie gesagt, die Kiste ist nur zu 90% ein PC, und *dieses* BIOS macht lauter solche lustigen Sachen. Statt Kompatibilitäts-Dummies einzubauen, schmeißt dieses BIOS Fehlermeldungen raus und gibt sich dann bis zum nächsten harten Reset sehr beleidigt.

            Naja, versuch' ich morgen mein Glück mal mit Novell DOS und FreeDOS. Und vielleicht noch ein paar anderen Clones. Irgendeiner muß ja mal booten.

            So, Caldera DR-DOS 7.03 mag genauso wenig, MS-DOS 4.01 hängt schon auf der Kiste, mit der ich die Platte bespiele, aber das "häßliche Entlein" FreeDOS 1.0 (ISO) bootet mit einer ausgeräumten FDCONFIG.SYS OHNE Patches. OK, ich lade sehr früh einen schnell zusammengehackten Device-Treiber, der ein paar BIOS-Funktionen entschärft, aber immerhin: Ich habe ein DOS, jetzt muß ich mich mit dem Einrenk-Tool herumschlagen. Frei nach Murphy wird das jetzt unbedingt Funktionen haben wollen, die FreeDOS und das BIOS nicht haben, und besteht darauf, an der nicht vorhandenen VGA herumzufummeln statt seinen Job zu erledigen.

            Alexander

            --
            Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
            1. Hi,

              Jaja, die Kiste ist nicht gerade ein gewöhnlicher PC. Das fängt schon damit an, dass nicht einmal Spuren einer Grafikkarte vorhanden sind. Tastatur- und Mausanschluß gibt's auch nicht, wenn man etwas von der Kiste will, hat man sich mit 9600/8N1 an COM1 zu melden.

              das ist etwas ungewohnt, aber nicht weiter schlimm; habe ich vor einiger Zeit bei einer kleinen PC104-Waffel auch so gemacht.

              Hat vielleicht der Arbeitsspeicher eine Macke ...?
              Definitiv nicht, Linux läuft nämlich ganz prima, und das ursprüngliche System auch. Speicherfehler wären im früheren Leben des Systems definitiv sehr schnell (und sehr unangenehm) aufgefallen.

              Gut, der Trumpf sticht.

              Dass der Interrupt-Vektor für INT 05 offensichtlich ins Nirwana zeigt, finde ich auch noch ziemlich seltsam.
              Nicht ins Nirvana, auf eine "Faß mich nicht an"-Routine im BIOS.

              Na, ich fand, dass "Unhandled real mode interrupt" doch sehr stark nach einem kaputten Interrupt-Vektor klingt - also einem, der nicht in ein gültiges Codesegment zeigt, so dass man dann in einer allgemeinen PageFault-Fehlerabfangroutine landet, die leider auch keine Abhilfe weiß.

              Normalerweise wird der von DOS so gesetzt, dass er auf die PrtScr-Routine zeigt.
              Nö, das macht schon das BIOS (auch bei normalen PCs).

              Stimmt, jetzt wo du's sagst - ich habe ja selbst schon Hardcopies von BIOS-Einstellungen auf diese Weise gemacht. Hätte ich wissen müssen.

              Win98SE raucht schon ab, bevor der erste Gerätetreiber geladen wird. Dafür schmeißt mir das BIOS einen wunderhübschen Dump vor die Füße.
              Das BIOS?? Das macht höchstens der DOS-Extender EMM386.EXE, der den V86-Mode initiiert und steuert. Dass das BIOS sowas tut, wäre mir neu.
              Wie gesagt, die Kiste ist nur zu 90% ein PC, und *dieses* BIOS macht lauter solche lustigen Sachen. Statt Kompatibilitäts-Dummies einzubauen, schmeißt dieses BIOS Fehlermeldungen raus und gibt sich dann bis zum nächsten harten Reset sehr beleidigt.

              Okay. Das bin ich sonst nicht gewöhnt.

              Frei nach Murphy wird das jetzt unbedingt Funktionen haben wollen, die FreeDOS und das BIOS nicht haben, und besteht darauf, an der nicht vorhandenen VGA herumzufummeln statt seinen Job zu erledigen.

              Das kann natürlich gut sein. Aber was wäre das Leben ohne solche Herausforderungen? Langweilig.

              Ciao,
               Martin

              --
              Die letzten Worte des Neandertalers:
              Möchte doch zu gern wissen, was in der Höhle ist ...
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Moin Moin!

                Hi,

                Jaja, die Kiste ist nicht gerade ein gewöhnlicher PC. Das fängt schon damit an, dass nicht einmal Spuren einer Grafikkarte vorhanden sind. Tastatur- und Mausanschluß gibt's auch nicht, wenn man etwas von der Kiste will, hat man sich mit 9600/8N1 an COM1 zu melden.

                das ist etwas ungewohnt, aber nicht weiter schlimm; habe ich vor einiger Zeit bei einer kleinen PC104-Waffel auch so gemacht.

                Jau, stört mich auch wenig. Lästig sind nur die diversen Tools, die am DOS und am BIOS vorbei Ein- und Ausgaben machen. Getoppt wird das nur noch von Tools, die DOS, BIOS und Hardware-Zugriff mischen.

                Zur letzeren Kategorie gehört eines der Reparatur-Tools. Oh Freude.

                Dass der Interrupt-Vektor für INT 05 offensichtlich ins Nirwana zeigt, finde ich auch noch ziemlich seltsam.
                Nicht ins Nirvana, auf eine "Faß mich nicht an"-Routine im BIOS.

                Na, ich fand, dass "Unhandled real mode interrupt" doch sehr stark nach einem kaputten Interrupt-Vektor klingt - also einem, der nicht in ein gültiges Codesegment zeigt, so dass man dann in einer allgemeinen PageFault-Fehlerabfangroutine landet, die leider auch keine Abhilfe weiß.

                Ja, normalerweise schon richtig. Aber das BIOS springt einfach für alles, was es nicht implementiert hat, in die Panik-Routine. Was im Rahmen der Aufgabe, das Original-Betriebssystem zu laden, schon fast sinnvoll ist.

                Frei nach Murphy wird das jetzt unbedingt Funktionen haben wollen, die FreeDOS und das BIOS nicht haben, und besteht darauf, an der nicht vorhandenen VGA herumzufummeln statt seinen Job zu erledigen.

                Das kann natürlich gut sein. Aber was wäre das Leben ohne solche Herausforderungen? Langweilig.

                Eben. Drei Tools gibt es, eines ist mangels VGA unbenutzbar, aber nicht so wirklich wichtig. Die beiden anderen funktionieren mit noch ein paar Anpassungen am Device-Treiber.

                Und weil Murphy mal wieder gnadenlos ist, stellen die beiden anderen Tools zwischen den Zeilen fest, dass ein Stückchen Hardware schlicht fehlt. Da hilft die beste Software nicht mehr.

                Naja, ich hab einiges gelernt, und einiges an altem Wissen wieder ausgegraben. Die Kiste wird dann wohl demnächst mit einem kleinen Helferlein unter Linux laufen, der die fehlende Hardware kompensiert -- genau wie es vorher wohl das Original-Betriebssystem auch gemacht hat.

                Alexander

                --
                Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
                1. Hi.

                  Naja, ich hab einiges gelernt, und einiges an altem Wissen wieder ausgegraben. Die Kiste wird dann wohl demnächst mit einem kleinen Helferlein unter Linux laufen, der die fehlende Hardware kompensiert -- genau wie es vorher wohl das Original-Betriebssystem auch gemacht hat.

                  Verrätst du uns, was das alte Schätzchen früher gemacht hat und was es jetzt machen soll?

                  Schönen Sonntag noch!
                  O'Brien

                  --
                  Frank und Buster: "Heya, wir sind hier um zu helfen!"
                  1. Moin Moin!

                    Verrätst du uns, was das alte Schätzchen früher gemacht hat

                    Pakete einpacken, Pakete auspacken, Pakete durch die Gegend schieben.

                    und was es jetzt machen soll?

                    Keine Ahnung. Erstmal sammeln, dann Existenzberechtigung suchen. Wahrscheinlichste Karrieren sind Webserver oder Router. Als X-Server taugt das Ding ja nicht sonderlich ... ;-)

                    Alexander

                    --
                    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
        2. Hi there,

          Win98SE raucht schon ab, bevor der erste Gerätetreiber geladen wird. Dafür schmeißt mir das BIOS einen wunderhübschen Dump vor die Füße.

          da hast Du wahrscheinlich zuviel RAM drinnen, nach meiner Erfahrung gibts mit WIN98 SE schon ab 512MB Probleme...(Obwohl's dem DOS alleine eigentlich egal sein könnte, das sieht soviel RAM ja ohnehin nicht)

          1. Hallo,

            Win98SE raucht schon ab, bevor der erste Gerätetreiber geladen wird. Dafür schmeißt mir das BIOS einen wunderhübschen Dump vor die Füße.
            da hast Du wahrscheinlich zuviel RAM drinnen, nach meiner Erfahrung gibts mit WIN98 SE schon ab 512MB Probleme

            ja, das ist richtig - und nicht erst für die Second Edition; dieses Problem hatte die erste Version schon. Kurioserweise lautete die Fehlermeldung beim Windows-Start dann "Not enough memory".

            ...(Obwohl's dem DOS alleine eigentlich egal sein könnte, das sieht soviel RAM ja ohnehin nicht)

            Mit Unterstützung durch himem.sys und emm386.exe schon. Aber du hast recht, dem DOS ist so viel RAM erstmal egal. Nicht weil es soviel nicht erkennt - sondern weil der Speicher-Engpass durch den integrierten Festplatten-Cache von Windows 98 verursacht wird, der bei 512MB RAM und mehr nicht mehr weiß, wo oben und unten ist und irrtümlich sämtlichen verfügbaren Speicher an sich reißt. Deshalb auch "not enough memory" für andere Zwecke.
            Durch einen Eintrag in der system.ini konnte man ihm das aber austreiben, indem man den Speicher für den Cache manuell begrenzt.

            Ciao,
             Martin

            --
            Niemand lebt allein von seinen Träumen.
            Aber wer träumt, lebt noch.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          2. Moin Moin!

            Win98SE raucht schon ab, bevor der erste Gerätetreiber geladen wird. Dafür schmeißt mir das BIOS einen wunderhübschen Dump vor die Füße.

            da hast Du wahrscheinlich zuviel RAM drinnen, nach meiner Erfahrung gibts mit WIN98 SE schon ab 512MB Probleme...(Obwohl's dem DOS alleine eigentlich egal sein könnte, das sieht soviel RAM ja ohnehin nicht)

            Hmmm, ich hab genau 512 MB in der Kiste. Lustig. Aber ich hab keinen Bock mehr, jetzt nochmal mit DOS rumzufummeln. DOS hilft mir mit der Maschine nicht weiter, und Linux hat mit einem Mini-Patch, einem kleinen Hilfsprogramm und ein paar Kommandozeilen-Parametern mit der Maschine keine Probleme mehr.

            Alexander

            --
            Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".