Сохраните вывод команды в файле MS-DOS 1.x

27

Кажется, что [COMMAND]>[FILE]не работает в ранних версиях MS-DOS. Я использую MS-DOS 1.25, и приведенное выше выражение дает утверждение invalid argument.

Обновление : так как это правда, что он не работает в DOS 1.x, то возможно получить этот вывод, используя некоторые функциональные возможности виртуальной коробки или, скажем, получая вывод из некоторых файлов журнала.

Блейк
источник
18
Почему вы используете DOS 1.25 ?!
Келтари
41
@Keltari: Нет раздражающих уведомлений об обновлении Windows 10
Марк К Коуэн
6
Если у вас есть какие-либо другие вопросы о вашей настройке, которые здесь не обсуждаются , попробуйте Retrocomputing , еще один сайт SE, посвященный подобным вещам. (Полное раскрытие: я могу быть немного связан с этим сайтом.)
wizzwizz4
4
Этот вопрос заставляет меня снова чувствовать себя молодым!
Дмитрий Григорьев
9
MS-DOS 1.x по сути является клоном CP / M, где Ctrl-P запускает копирование вывода консоли на принтер. Поэтому подобный подход может быть возможен и в MS-DOS.
Турбьерн Равн Андерсен

Ответы:

5

вы можете использовать средства отладки вашей виртуальной машины (или GDB / что-то еще) для непосредственного чтения памяти. MS-DOS не имеет защиты памяти и не является многозадачной системой, поэтому вы можете читать память виртуальной машины, вы можете читать виртуальную машину VGA для ввода.

документация говорит, что существует команда

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

правильный синтаксис для вывода: run VirtualBox --debug --startvm msdos1.25, затем в консоли отладчика: info vgatext

скопированный вывод:

The COMPAQ Personal Computer DOS                                                
Version 1.11                                                                    


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


A>                                                                              











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

Таким образом, вы можете написать сценарий отладчика, который перехватывает значение памяти в памяти вашей программы и выводит экран vga, когда программа выводит данные, или вы можете написать сценарий, который останавливает процессор, сохраняет содержимое последовательно, если выходные данные изменяются, сохраняет обновленное содержимое, продолжается процессор запустить

Некоторые варианты для расследования:

  • узнайте, как написать сценарий отладки для выгрузки содержимого памяти вашего приложения

  • найти решение для отладки vga драйвера / последовательного порта / памяти для quemu / dosbox / virtualbox

  • найти какую-нибудь старую утилиту 80-х годов, которую, возможно, кто-то написал для этой цели

  • добавьте сюда тег Freedos (или даже переместите / повторите ваш вопрос о большом стеке потока, я полагаю, некоторые гуру должны кое-что знать о таких проблемах)

Я обновлю позже, если найду что-нибудь интересное, но не могли бы вы рассказать подробнее о том, почему вы используете 1.25, работает ли эта программа на более новых версиях msdos? Могу поспорить, что вы можете найти какого-нибудь молодого сборочного хакера, желающего за небольшую плату залатать эту программу до новой версии (или добавить вывод файла с помощью asm)

strangeqargo
источник
Не могли бы вы дать дополнительную информацию об этом процессе, пожалуйста?
Блейк
@Blake обновлен, кажется, info vgatextработает после всего, все, что вам нужно сделать, это написать правильный сценарий для отладчика, как кажется
странное время
Информация, которую вы дали, очень интересна. На самом деле это может быть абсолютно пригодным для моей ситуации. Я использую это для старого приложения, которое я хочу понять, как оно работает, давая ему ввод и получая вывод автоматически. Возможно, это не самый лучший способ, но я хочу сделать это так. Спасибо за ответ, просто дайте мне день или два, чтобы прочитать это руководство и написать какой-то сценарий (надеюсь, что это возможно) и даст вам информацию о том, работает ли он. Большое спасибо.
Блейк
1
Если бы я еще не пометил ответ, я бы обязательно это отметил. Спасибо за вашу помощь, ребята.
Блейк
1
Мне нужно было получить вывод моего приложения в виде текста. В документации упоминается, как использовать отладочную консоль в терминале. Используя VBoxManaged debugvms <имя уже запущенной виртуальной машины в режиме отладки> info vgatext, он выводит на экран экран в терминальном режиме и их с помощью перенаправления и некоторого простого анализа, мне удалось получить то, что мне нужно. Спасибо.
Блейк
40

Похоже, что [COMMAND]> [FILE] не работает в ранних версиях MS-DOS.

Я использую MS-DOS 1.25 и приведенное выше выражение дает утверждение недопустимый аргумент

Это правильно. То, что вы хотите сделать, не возможно в v1.25.

Перенаправление команд (наряду со многими другими улучшениями) было добавлено в v2.0.

MS-DOS версии 2.0 (эквивалент PC-DOS 2.0) впервые была выпущена в марте 1983 года. В ретроспективе это была новая операционная система (хотя для обеспечения совместимости с MS-DOS версии 1 были предприняты большие усилия). Он содержал много значительных нововведений и улучшенных функций, в том числе перечисленных на следующей странице.

  • Поддержка как дискет большей емкости, так и жестких дисков
  • Многие UNIX / XENIX-подобные функции, включая иерархическую файловую структуру, файловые дескрипторы, перенаправление ввода / вывода, каналы и фильтры
  • Фоновая печать (печать спулинга)
  • Метки тома плюс дополнительные атрибуты файла
  • Устанавливаемые драйверы устройств
  • Настраиваемый пользователем файл конфигурации системы, который контролирует загрузку дополнительных драйверов устройств, количество системных дисковых буферов и т. Д.
  • Поддержка блоков среды, которые могут использоваться для передачи информации между программами
  • Дополнительный драйвер дисплея ANSI, позволяющий программам позиционировать курсор и управлять характеристиками дисплея аппаратно-независимым способом
  • Поддержка динамического выделения, модификации и освобождения памяти прикладными программами
  • Поддержка пользовательских интерпретаторов команд (оболочек)
  • Системные таблицы, помогающие прикладному программному обеспечению изменять его валюту, время и форматы даты (известные как международная поддержка)

Исходное расширенное программирование MS-DOS Рэй Дункан


Что я могу сделать вместо этого?

Возможный обходной путь - захват экрана (в виде текста) и анализ выходных данных.

Ответы на этот вопрос Снимок экрана в DOS содержит список некоторых программ TSR (Terminate but Stay Resident), которые являются отправной точкой для изучения.

ДэвидПостилл
источник
13
Хороший ответ. Только самые честные из суперпользователей будут заботиться о MS-DOS 1.0.
Я говорю, восстанови Монику
Спасибо за ваш ответ, я ценю это, но я хочу найти способ (скажем, с использованием функций виртуального ящика), поэтому я не буду отмечать это как ответ на данный момент.
Блейк
@Blake Возможный обходной путь - захватить экран (как текст) и проанализировать вывод. Я обновил ответ.
ДэвидПостилл
Заранее прошу прощения за задержку результатов при попытке использования этой программы tsr. Как только я получу доступ к своей машине, я дам вам знать. Это отличная альтернатива, и я очень надеюсь на правильную работу. Нужно ли устанавливать какие-либо другие программы (которые, например, создают эту среду tsr)?
Блейк
1
@ Блейк Не то, чтобы я помню, но прошло много лет с тех пор, как я использовал DOS. Не беспокойтесь о задержках в тестировании;)
DavidPostill
-3

Вы можете установить C и написать программу, которая будет принимать команды dos, запускать их в оболочке и регистрировать результаты. Я бы порекомендовал вам использовать Borland Turbo C 2.01. Вы также можете написать код на Quickbasic, если вы хотите написать код ... ;-)

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

Лично я бы использовал DOS 5.5 или 6, учитывая, что есть несколько дополнительных вещей, которые вы получите.

Gandolf989
источник
1
Это работает в v1.25?
Блейк
И если да, можете ли вы дать мне некоторую дополнительную помощь по установке C и регистрации результатов, большое спасибо.
Блейк
1
@ Blake это не работает в v1
edc65
Использование C для написания программы было бы полезным ответом, если бы упоминались API, которые вы будете использовать при написании такой программы. (И, конечно, принял во внимание явное требование в вопросе о совместимости кода с DOS 1.x.) Этот ответ не дает ни того, ни другого. Он просто спамит ссылку на популярный пакет компилятора / IDE, без каких-либо указаний на актуальность такого набора инструментов.
Коди Грэй,
Компилятор C имеет средства для stdin и stdout и может запускать команды оболочки. Я не знаю, какой компилятор будет работать в DOS 1. Если вы так озабочены обслуживанием платы, лучше задать вопрос, зачем кому-то писать код для MS DOS 1 ...
Gandolf989