Enregistrez la sortie de la commande dans le fichier MS-DOS 1.x

27

Il semble que [COMMAND]>[FILE]cela ne fonctionne pas dans les premières versions de MS-DOS. J'utilise MS-DOS 1.25 et l'expression ci-dessus donne la déclaration invalid argument.

Mise à jour : Puisqu'il est vrai que cela ne fonctionne pas sous DOS 1.x, il est alors possible d'obtenir cette sortie en utilisant certaines fonctionnalités de la boîte virtuelle ou de dire en obtenant la sortie de certains fichiers journaux.

Blake
la source
18
Pourquoi utilisez-vous DOS 1.25?!
Keltari
41
@Keltari: Aucune notification de mise à jour ennuyeuse de Windows 10
Mark K Cowan
6
Si vous avez d'autres questions sur votre configuration qui ne seraient pas abordées ici, essayez Retrocomputing , un autre site SE dédié à ce genre de chose. (Divulgation complète: je suis peut-être un peu affilié à ce site.)
wizzwizz4
4
Cette question me fait me sentir à nouveau jeune!
Dmitry Grigoryev
9
MS-DOS 1.x est essentiellement un clone CP / M, où Ctrl-P a déclenché la copie de la sortie de la console vers l'imprimante. Une approche similaire peut donc également être possible dans MS-DOS.
Thorbjørn Ravn Andersen

Réponses:

5

vous pouvez utiliser les fonctionnalités de débogage de votre machine virtuelle (ou gdb / autre chose) pour lire directement la mémoire. ms-dos n'a pas de protection de mémoire ni un système multi-tâches, vous pouvez donc lire la mémoire de la machine virtuelle, vous pouvez lire la vga de la machine virtuelle pour l'entrée.

la documentation indique qu'il existe une commande

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

la syntaxe correcte pour obtenir la sortie est: exécutez VirtualBox --debug --startvm msdos1.25, puis, dans la console du débogueur: info vgatext

sortie copiée-collée:

The COMPAQ Personal Computer DOS                                                
Version 1.11                                                                    


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


A>                                                                              











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

Ainsi, vous pouvez écrire un script de débogage qui s'accroche à une valeur de mémoire dans la mémoire de votre programme et vide l'écran vga lorsqu'un programme génère / ou vous pouvez écrire un script qui met en pause le processeur, enregistre le contenu de manière cohérente, si la sortie change, enregistre le contenu mis à jour, continue cpu run

Quelques options à étudier sont:

  • découvrez comment écrire un script de débogage pour vider le contenu de la mémoire de votre application

  • trouver un débogage de pilote vga / port série / solution de vidage de mémoire pour quemu / dosbox / virtualbox

  • trouver un ancien programme utilitaire des années 80 que quelqu'un a peut-être écrit à cet effet

  • ajoutez la balise freedos ici (ou même déplacez / répétez votre question sur un gros stackoverflow, je suppose que certains gourous devraient savoir quelque chose sur des problèmes comme celui-ci

Je mettrai à jour plus tard si je trouve quelque chose d'intéressant, mais pouvez-vous s'il vous plaît révéler quelques détails sur la raison pour laquelle vous utilisez 1.25, ce programme fonctionne-t-il sur les nouvelles versions de msdos? Je parie que vous pouvez trouver un jeune hacker d'assemblage désireux de mettre à jour ce programme vers une version plus récente (ou d'ajouter une sortie de fichier avec asm) pour une somme modique

étrangeqargo
la source
Pourriez-vous donner des informations supplémentaires sur ce processus, s'il vous plaît?
Blake
@Blake mis à jour, semble info vgatextfonctionner après tout, tout ce que vous avez à faire est d'écrire un script correct pour le débogueur, il semble
étrangeqargo
Les informations que vous avez données sont très intéressantes. En fait, cela peut être absolument utilisable pour ma situation. J'utilise ceci pour une ancienne application que je veux comprendre comment cela fonctionne en lui donnant une entrée et en obtenant une sortie automatiquement. Ce n'est peut-être pas le meilleur moyen mais je veux le faire comme ça. Merci pour la réponse, donnez-moi juste un jour ou deux pour lire ce manuel et écrire une sorte de script (j'espère que c'est possible) et vous donnera des informations pour savoir si cela fonctionne. Merci beaucoup.
Blake
1
Si je n'ai pas déjà marqué de réponse, je le marquerais certainement. Merci pour votre aide.
Blake
1
J'avais besoin d'obtenir la sortie de mon application sous forme de texte. Dans la documentation est mentionné comment utiliser la console de débogage dans le terminal. À l'aide de VBoxManaged debugvms <nom de la machine virtuelle déjà démarrée en mode débogage> info vgatext, il vous affiche l'écran en mode terminal et les utilise à l'aide de la redirection et d'une sorte d'analyse simple, j'ai réussi à obtenir ce dont j'avais besoin. Merci.
Blake
40

Il semble que [COMMANDE]> [FICHIER] ne fonctionne pas dans les premières versions de MS-DOS.

J'utilise MS-DOS 1.25 et l'expression ci-dessus donne l'argument invalide de la déclaration

C'est exact. Ce que vous voulez faire n'est pas possible dans la v1.25.

La redirection de commandes (ainsi que de nombreuses autres améliorations) a été ajoutée dans la version 2.0.

La version MS-DOS 2.0 (équivalente à PC-DOS 2.0) a été lancée pour la première fois en mars 1983. Il s'agissait, rétrospectivement, d'un nouveau système d'exploitation (bien que le plus grand soin ait été pris pour maintenir la compatibilité avec MS-DOS version 1). Il contenait de nombreuses innovations importantes et fonctionnalités améliorées, y compris celles répertoriées sur la page suivante.

  • Prise en charge des disquettes et des disques durs de plus grande capacité
  • De nombreuses fonctionnalités de type UNIX / XENIX, notamment une structure de fichiers hiérarchique, des descripteurs de fichiers, une redirection d'E / S, des canaux et des filtres
  • Impression en arrière-plan (impression différée)
  • Étiquettes de volume, plus des attributs de fichier supplémentaires
  • Pilotes de périphérique installables
  • Un fichier de configuration système personnalisable par l'utilisateur qui contrôlait le chargement de pilotes de périphériques supplémentaires, le nombre de tampons de disque système, etc.
  • Maintenance des blocs d'environnement pouvant être utilisés pour transmettre des informations entre les programmes
  • Un pilote d'affichage ANSI en option qui permettait aux programmes de positionner le curseur et de contrôler les caractéristiques d'affichage d'une manière indépendante du matériel
  • Prise en charge de l'allocation dynamique, de la modification et de la libération de mémoire par les programmes d'application
  • Prise en charge d'interprètes de commandes utilisateur personnalisés (shells)
  • Tables système pour aider le logiciel d'application à modifier ses formats de devise, d'heure et de date (connu sous le nom de support international)

Source avancée MS-DOS Programmation par Ray Duncan


Que puis-je faire à la place?

Une solution de contournement possible serait de capturer l'écran (sous forme de texte) et d'analyser la sortie.

Les réponses à cette question La capture d'écran dans DOS répertorie certains programmes TSR (Terminate but Stay Resident) qui sont des points de départ pour vous d'enquêter.

DavidPostill
la source
13
Bonne réponse. Seul le plus vrai des super utilisateurs se soucierait du MS-DOS 1.0.
Je dis Réintégrer Monica
Merci pour votre réponse, je l'apprécie mais je veux trouver un moyen (par exemple en utilisant les fonctions de boîte virtuelle) c'est pourquoi je ne vais pas le marquer comme réponse pour le moment.
Blake
@Blake Une solution de contournement possible consisterait à capturer l'écran (sous forme de texte) et à analyser la sortie. J'ai mis à jour la réponse.
DavidPostill
Je suis désolé à l'avance pour le retard des résultats lors de l'utilisation de ces programmes tsr. Dès que j'aurai accès à ma machine, je vous le ferai savoir. C'est une excellente alternative et j'espère tellement travailler correctement. Est-il nécessaire d'installer d'autres programmes (qui par exemple créent cet environnement tsr)?
Blake
1
@Blake Pas que je me souvienne, mais cela fait de nombreuses années que je n'ai pas utilisé DOS. Ne vous inquiétez pas des retards dans vos tests;)
DavidPostill
-3

Vous pouvez installer C et écrire un programme pour prendre les commandes dos, les exécuter dans un shell et enregistrer les résultats. Je recommanderais d'utiliser Borland Turbo C 2.01. Vous pouvez également écrire du code dans Quickbasic si vous cherchez à écrire du code ... ;-)

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

Personnellement, j'utiliserais DOS 5.5 ou 6 étant donné qu'il y a quelques choses supplémentaires que vous obtiendriez.

Gandolf989
la source
1
Est-ce que cela fonctionne en v1.25?
Blake
Et si oui, pouvez-vous m'aider à installer C et à enregistrer les résultats, merci beaucoup.
Blake
1
@Blake cela ne fonctionne pas dans la v1
edc65
L'utilisation de C pour écrire un programme serait une réponse utile, si elle mentionnait les API que vous utiliseriez lors de l'écriture d'un tel programme. (Et, bien sûr, a pris en compte l'exigence explicite dans la question que le code soit compatible avec DOS 1.x.) Cette réponse ne fait rien non plus. Il s'agit simplement d'un lien vers un compilateur / package IDE populaire, sans aucune indication sur la pertinence d'un tel ensemble d'outils.
Cody Gray
Le compilateur C dispose d'installations pour stdin et stdout et il peut exécuter des commandes shell. Je ne sais pas quel compilateur fonctionnerait sous DOS 1. Si vous êtes tellement préoccupé par la maintenance de la carte, une meilleure question serait de savoir pourquoi quelqu'un devrait écrire du code pour MS DOS 1 ...
Gandolf989