Speichern Sie die Ausgabe des Befehls in der Datei MS-DOS 1.x.

27

Es scheint, dass [COMMAND]>[FILE] funktioniert nicht in den frühen Versionen von MS-DOS. Ich verwende MS-DOS 1.25 und der obige Ausdruck gibt die Anweisung invalid argument.

Aktualisieren : Da es wahr ist, dass es unter DOS 1.x nicht funktioniert, ist es möglich, diese Ausgabe unter Verwendung einiger Funktionen der virtuellen Box oder beispielsweise durch Abrufen der Ausgabe von einigen Protokolldateien zu erhalten.

Blake
quelle
18
Warum benutzt du DOS 1.25 ?!
Keltari
41
@ Keltari: Keine nervigen Windows 10 Update-Benachrichtigungen
Mark K Cowan
6
Wenn Sie weitere Fragen zu Ihrem Setup haben, die hier nicht zum Thema gehören, versuchen Sie es Retrocomputing , eine weitere SE-Site, die sich dieser Sache widmet. (Vollständige Offenlegung: Ich kann ein wenig verbunden mit dieser Seite.)
wizzwizz4
4
Durch diese Frage fühle ich mich wieder jung!
Dmitry Grigoryev
9
MS-DOS 1.x ist im Wesentlichen ein CP / M-Klon, bei dem Strg-P ​​das Kopieren der Konsolenausgabe auf den Drucker ausgelöst hat. Ein ähnlicher Ansatz ist daher möglicherweise auch in MS-DOS möglich.
Thorbjørn Ravn Andersen

Antworten:

5

Sie können die Debugging-Funktionen Ihrer virtuellen Maschine (oder gdb / etwas anderes) verwenden, um den Speicher direkt zu lesen. ms-dos verfügt weder über einen Speicherschutz noch über ein Multitasking-System. Sie können also den Arbeitsspeicher der virtuellen Maschine und vga der virtuellen Maschine zur Eingabe lesen.

Dokumentation sagt, dass es einen Befehl gibt

info vgatext -- print the contents of the VGA framebuffer formatted as standard text mode

Die korrekte Syntax für die Ausgabe lautet: Lauf VirtualBox --debug --startvm msdos1.25Dann in der Debugger-Konsole: info vgatext

kopiert eingefügte Ausgabe:

The COMPAQ Personal Computer DOS                                                
Version 1.11                                                                    


(C) Copyright COMPAQ Computer Corp. 1982                                        
(C) Copyright Microsoft 1981, 82                                                


A>                                                                              











--------------------------------------------------------------------------------
VBoxDbg> 

Sie können also ein Debugger-Skript schreiben, das einen Speicherwert im Speicher Ihres Programms festlegt und den vga-Bildschirm ausgibt, wenn ein Programm etwas ausgibt, oder Sie können ein Skript schreiben, das die CPU anhält, den Inhalt konsistent speichert, wenn sich die Ausgabe ändert, den aktualisierten Inhalt speichert und fortfährt CPU laufen

Einige zu untersuchende Optionen sind:

  • Hier erfahren Sie, wie Sie ein Debugging-Skript zum Speichern des Speicherinhalts Ihrer Anwendung schreiben

  • Finden Sie einige Debugging-VGA-Treiber / serielle Schnittstelle / Speicher-Dumping-Lösung für Quemu / Dosbox / Virtualbox

  • Finden Sie ein altes Hilfsprogramm aus den 80ern, das vielleicht jemand zu diesem Zweck geschrieben hat

  • füge hier freedos tag hinzu (oder verschiebe / wiederhole deine Frage zum großen Stackoverflow, ich nehme an, einige Gurus sollten etwas über solche Probleme wissen

Ich werde später aktualisieren, wenn ich etwas Interessantes finde, aber können Sie bitte einige Details darüber preisgeben, warum Sie 1.25 verwenden. Funktioniert dieses Programm auf neueren Versionen von MSDOS? Ich wette, Sie können einige junge Assembly-Hacker finden, die bereit sind, dieses Programm gegen eine geringe Gebühr auf eine neuere Version zu aktualisieren (oder Dateiausgaben mit asm hinzuzufügen)

strangeqargo
quelle
Könnten Sie uns bitte zusätzliche Informationen zu diesem Vorgang geben?
Blake
@Blake aktualisiert, scheint info vgatext funktioniert schließlich alles, was Sie tun müssen, ist ein korrektes Skript für den Debugger zu schreiben, wie es scheint
strangeqargo
Die Informationen, die Sie gaben, sind sehr interessant. Tatsächlich kann es für meine Situation absolut brauchbar sein. Ich benutze dies für eine alte Anwendung, die ich verstehen möchte, wie es funktioniert, indem ich ihr Input gebe und automatisch Output bekomme. Es ist vielleicht nicht der beste Weg, aber ich möchte es so machen. Vielen Dank für die Antwort. Geben Sie mir ein oder zwei Tage Zeit, um dieses Handbuch zu lesen und ein Skript zu schreiben (ich hoffe, es ist möglich), und geben Sie Informationen darüber, ob es funktioniert. Vielen Dank.
Blake
1
Wenn ich die Antwort noch nicht markiert habe, würde ich sie definitiv markieren. Vielen Dank für all eure Hilfe.
Blake
1
Ich musste meine Bewerbung als Text ausgeben. In der Dokumentation wird erwähnt, wie die Debug-Konsole im Terminal verwendet wird. Using VBoxManaged debugvms & lt; Name der bereits im Debug-Modus gestarteten VM & gt; info vgatext es druckt dir den bildschirm im terminal-modus und sie mit umleitung und einer art einfacher syntaktik Ich habe es geschafft, das zu bekommen, was ich brauchte. Vielen Dank.
Blake
40

Es scheint, dass [BEFEHL] & gt; [DATEI] in den frühen Versionen von MS-DOS nicht funktioniert.

Ich verwende MS-DOS 1.25 und der obige Ausdruck gibt die Anweisung ungültiges Argument

Das ist richtig. Was Sie tun möchten, ist in Version 1.25 nicht möglich.

Befehlsumleitung (zusammen mit vielen anderen Verbesserungen) wurde in v2.0 hinzugefügt.

MS-DOS Version 2.0 (entspricht PC-DOS 2.0) wurde erstmals im März veröffentlicht   1983. Es war im Nachhinein ein neues Betriebssystem (obwohl große Sorgfalt war   zur Aufrechterhaltung der Kompatibilität mit MS-DOS Version 1). Es enthielt viele   bedeutende Neuerungen und erweiterte Funktionen, einschließlich der auf   die folgende Seite.

  • Unterstützung für größere Disketten und Festplatten
  • Viele UNIX / XENIX-ähnliche Funktionen, einschließlich einer hierarchischen Dateistruktur, Dateihandles, E / A-Umleitung, Pipes und Filtern
  • Hintergrunddruck (Druckspooling)
  • Datenträgerbezeichnungen sowie zusätzliche Dateiattribute
  • Installierbare Gerätetreiber
  • Eine vom Benutzer anpassbare Systemkonfigurationsdatei, die das Laden zusätzlicher Gerätetreiber sowie die Anzahl der Systemfestplatten kontrollierte   Puffer und so weiter
  • Wartung von Umgebungsblöcken, mit denen Informationen zwischen Programmen übertragen werden können
  • Ein optionaler ANSI-Anzeigetreiber, mit dem Programme den Cursor positionieren und die Anzeigeeigenschaften in a steuern konnten   hardwareunabhängig
  • Unterstützung für die dynamische Zuweisung, Änderung und Freigabe von Speicher durch Anwendungsprogramme
  • Unterstützung für benutzerdefinierte User Command Interpreter (Shells)
  • Systemtabellen zur Unterstützung der Anwendungssoftware beim Ändern von Währungs-, Zeit- und Datumsformaten (als internationaler Support bezeichnet)

Quelle Erweiterte MS-DOS-Programmierung von Ray Duncan


Was kann ich stattdessen tun?

Eine mögliche Problemumgehung wäre, den Bildschirm (als Text) zu erfassen und die Ausgabe zu analysieren.

Die Antworten auf diese Frage Bildschirmaufnahme unter DOS Listen Sie einige TSR-Programme (Terminate but Stay Resident) auf, die Ausgangspunkte für Ihre Untersuchung sind.

DavidPostill
quelle
13
Gute Antwort. Nur die wirklichsten Superuser würden sich überhaupt um MS-DOS 1.0 kümmern.
Twisty Impersonator
Vielen Dank für Ihre Antwort, ich weiß das zu schätzen, aber ich möchte einen Weg finden (etwa mithilfe von Virtual-Box-Funktionen), deshalb werde ich es im Moment nicht als Antwort markieren.
Blake
@Blake Eine mögliche Problemumgehung besteht darin, den Bildschirm (als Text) zu erfassen und die Ausgabe zu analysieren. Ich habe die Antwort aktualisiert.
DavidPostill
Ich entschuldige mich im Voraus für die Verzögerung der Ergebnisse, wenn ich versuche, dieses tsr-Programm zu verwenden. Sobald ich Zugang zu meiner Maschine habe, werde ich Sie informieren. Es ist eine großartige Alternative und ich hoffe so sehr, dass ich richtig arbeiten kann. Müssen andere Programme installiert werden (wodurch beispielsweise diese tsr-Umgebung erstellt wird)?
Blake
1
@Blake Nicht, dass ich mich erinnern kann, aber es ist viele Jahre, seit ich DOS benutzt habe. Mach dir keine Sorgen über die Verzögerungen beim Testen;)
DavidPostill
-3

Sie können C installieren und ein Programm schreiben, um die DOS-Befehle zu übernehmen, sie in einer Shell auszuführen und die Ergebnisse zu protokollieren. Ich würde empfehlen, dass Sie Borland Turbo C 2.01 verwenden. Sie können auch Code in Quickbasic schreiben, wenn Sie Code schreiben möchten ... ;-)

https://archive.org/details/msdos_borland_turbo_c_2.01

Persönlich würde ich DOS 5.5 oder 6 verwenden, vorausgesetzt, es gibt ein paar zusätzliche Dinge, die Sie bekommen würden.

Gandolf989
quelle
1
Funktioniert das in v1.25?
Blake
Wenn ja, können Sie mir zusätzliche Hilfe bei der Installation von C geben und wie die Ergebnisse protokolliert werden, vielen Dank.
Blake
1
@Blake es funktioniert nicht in v1
edc65
Die Verwendung von C zum Schreiben eines Programms wäre eine hilfreiche Antwort, wenn die APIs erwähnt würden, die Sie beim Schreiben eines solchen Programms verwenden würden. (Berücksichtigt wurde natürlich auch die ausdrückliche Anforderung in der Frage, dass der Code mit DOS 1.x kompatibel sein muss.) Diese Antwort enthält auch keine. Es wird lediglich ein Link zu einem beliebten Compiler / IDE-Paket verschickt, ohne dass eine Anleitung zur Relevanz eines solchen Toolsets vorliegt.
Cody Gray
Der C-Compiler verfügt über Funktionen für stdin und stdout und kann Shell-Befehle ausführen. Ich weiß nicht, welcher Compiler in DOS 1 funktionieren würde. Wenn Sie so besorgt über die Wartung der Karte sind, wäre eine bessere Frage, warum jemand Code für MS DOS 1 schreiben würde ...
Gandolf989