Zapisz dane wyjściowe polecenia w pliku MS-DOS 1.x

27

Wygląda na to, że [COMMAND]>[FILE]nie działa we wczesnych wersjach MS-DOS. Korzystam z MS-DOS 1.25 i powyższe wyrażenie podaje to zdanie invalid argument.

Aktualizacja : Ponieważ prawdą jest, że nie działa w systemie DOS 1.x, możliwe jest uzyskanie tego wyniku przy użyciu niektórych funkcji wirtualnego boxa lub powiedzmy, otrzymując dane wyjściowe z niektórych plików dziennika.

Blake
źródło
18
Dlaczego używasz DOS 1.25 ?!
Keltari
41
@Keltari: Brak irytujących powiadomień o aktualizacji systemu Windows 10
Mark K Cowan,
6
Jeśli masz inne pytania dotyczące konfiguracji, które nie byłyby tutaj na ten temat, spróbuj Retrocomputing , kolejnej witryny SE poświęconej tego rodzaju zagadnieniom. (Pełne ujawnienie: mogę być trochę powiązany z tą witryną.)
wizzwizz4
4
To pytanie sprawia, że ​​znów czuję się młody!
Dmitrij Grigoriew
9
MS-DOS 1.x jest zasadniczo klonem CP / M, w którym Ctrl-P uruchomił kopiowanie danych wyjściowych konsoli do drukarki. Podobne podejście może być zatem możliwe również w MS-DOS.
Thorbjørn Ravn Andersen

Odpowiedzi:

5

możesz użyć narzędzi do debugowania maszyny wirtualnej (lub gdb / czegoś innego) do bezpośredniego odczytu pamięci. ms-dos nie ma ochrony pamięci ani nie jest systemem wielozadaniowym, więc możesz odczytać pamięć maszyny wirtualnej, możesz odczytać vga maszyny wirtualnej do wprowadzenia.

dokumentacja mówi, że istnieje polecenie

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

poprawna składnia do uzyskania danych wyjściowych to: uruchom VirtualBox --debug --startvm msdos1.25, a następnie w konsoli debuggera: info vgatext

wyniki wklejania kopii:

The COMPAQ Personal Computer DOS                                                
Version 1.11                                                                    


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


A>                                                                              











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

Możesz więc napisać skrypt debugera, który zaczepia o wartość pamięci w pamięci programu i zrzuca ekran vga, gdy program wysyła dane wyjściowe / lub możesz napisać skrypt, który wstrzymuje procesor, konsekwentnie zapisuje zawartość, jeśli zmiany danych wyjściowych, zapisuje zaktualizowaną treść, kontynuuje uruchom procesor

Niektóre opcje do zbadania to:

  • dowiedz się, jak napisać skrypt debugowania w celu zrzucenia zawartości pamięci aplikacji

  • znaleźć jakieś rozwiązanie debugowania sterownika vga / portu szeregowego / zrzutu pamięci dla quemu / dosbox / virtualbox

  • znajdź jakiś stary program narzędziowy z lat 80., który może ktoś tam napisał w tym celu

  • dodaj tutaj tag freedos (lub nawet przenieś / powtórz pytanie na dużym przepełnieniu stosu, przypuszczam, że niektórzy guru powinni wiedzieć coś o takich problemach

Będę aktualizować później, jeśli znajdę coś interesującego, ale czy możesz ujawnić niektóre szczegóły, dlaczego używasz 1.25, czy ten program działa na nowszych wersjach msdos? Założę się, że możesz znaleźć młodego hakera montażu, który chciałby załatać ten program do nowszej wersji (lub dodać plik wyjściowy z asmem) za niewielką opłatą

dziwny qargo
źródło
Czy możesz podać dodatkowe informacje na temat tego procesu?
Blake
@Blake zaktualizowany, wydaje się działać mimo info vgatextwszystko, wszystko co musisz zrobić, to napisać poprawny skrypt do debuggera, wydaje się
dziwne qargo
Podane informacje są bardzo interesujące. W rzeczywistości może to być absolutnie przydatne w mojej sytuacji. Używam tego do starej aplikacji, którą chcę zrozumieć, działając, podając dane wejściowe i automatycznie uzyskując dane wyjściowe. To może nie być najlepszy sposób, ale chcę to zrobić w ten sposób. Dziękuję za odpowiedź, daj mi dzień lub dwa na przeczytanie tego podręcznika i napisanie jakiegoś skryptu (mam nadzieję, że jest to możliwe) i poda informacje o tym, czy działa. Dziękuję bardzo.
Blake
1
Jeśli jeszcze nie zaznaczyłem odpowiedzi, zdecydowanie to zaznaczę. Dziękuję za całą waszą pomoc chłopaki.
Blake
1
Musiałem uzyskać wynik mojej aplikacji jako tekst. W dokumentacji wspomniano, jak korzystać z konsoli debugowania w terminalu. Używając VBoxManaged debugvms <nazwa już uruchomionego w trybie debugowania VM> info vgatext drukuje ci ekran w trybie terminalowym i za pomocą przekierowania i jakiegoś prostego parsowania udało mi się uzyskać to, czego potrzebowałem. Dziękuję Ci.
Blake,
40

Wygląda na to, że [POLECENIE]> [PLIK] nie działa we wczesnych wersjach MS-DOS.

Używam MS-DOS 1.25 i powyższe wyrażenie podaje niepoprawny argument instrukcji

To jest poprawne. To, co chcesz zrobić, nie jest możliwe w wersji 1.25.

W wersji 2.0 dodano przekierowanie poleceń (wraz z wieloma innymi ulepszeniami).

MS-DOS wersja 2.0 (odpowiednik PC-DOS 2.0) został wydany po raz pierwszy w marcu 1983 roku. Z perspektywy czasu był to nowy system operacyjny (choć dołożono wszelkich starań, aby zachować zgodność z MS-DOS wersja 1). Zawierał wiele istotnych innowacji i ulepszonych funkcji, w tym wymienionych na następnej stronie.

  • Obsługa zarówno dyskietek o większej pojemności, jak i dysków twardych
  • Wiele funkcji podobnych do UNIX / XENIX, w tym hierarchiczna struktura plików, uchwyty plików, przekierowanie I / O, potoki i filtry
  • Drukowanie w tle (buforowanie wydruku)
  • Etykiety woluminów oraz dodatkowe atrybuty plików
  • Sterowniki urządzeń do zainstalowania
  • Konfigurowalny przez użytkownika plik konfiguracji systemu, który kontrolował ładowanie dodatkowych sterowników urządzeń, liczbę buforów dysków systemowych i tak dalej
  • Utrzymanie bloków środowiska, które można wykorzystać do przekazywania informacji między programami
  • Opcjonalny sterownik ekranu ANSI, który pozwalał programom ustawiać kursor i sterować charakterystyką wyświetlania w sposób niezależny od sprzętu
  • Obsługa dynamicznej alokacji, modyfikacji i zwalniania pamięci przez aplikacje
  • Obsługa niestandardowych interpretatorów poleceń użytkownika (powłok)
  • Tabele systemowe pomagające oprogramowaniu aplikacyjnemu w modyfikowaniu formatu waluty, godziny i daty (znane jako wsparcie międzynarodowe)

Źródło Zaawansowane programowanie MS-DOS autorstwa Ray Duncan


Co mogę zamiast tego zrobić?

Możliwym obejściem byłoby przechwycenie ekranu (jako tekstu) i parsowanie wyników.

Odpowiedzi na to pytanie Zrzut ekranu w systemie DOS zawiera listę programów TSR (Zakończ, ale zostań rezydentem), które są punktami wyjścia do zbadania.

DavidPostill
źródło
13
Niezła odpowiedź. Tylko najprawdziwsi superużytkownicy w ogóle dbaliby o MS-DOS 1.0.
Mówię: Przywróć Monikę
Dziękuję za odpowiedź, doceniam ją, ale chcę znaleźć sposób (powiedzmy, używając funkcji wirtualnego pudełka), dlatego nie oznaczę tego jako odpowiedzi na razie.
Blake,
@Blake Możliwe obejście polega na przechwyceniu ekranu (jako tekstu) i analizie wyników. Zaktualizowałem odpowiedź.
DavidPostill
Z góry przepraszam za opóźnienie wyników podczas próby korzystania z tego programu tsr. Jak tylko uzyskam dostęp do mojej maszyny, dam ci znać. To świetna alternatywa i mam nadzieję, że tak dużo zadziała. Czy konieczne jest zainstalowanie innych programów (które na przykład tworzą to środowisko tsr)?
Blake,
1
@Blake Nie pamiętam, ale minęło wiele lat, odkąd korzystałem z DOS. Nie martw się opóźnieniami w testowaniu;)
DavidPostill
-3

Możesz zainstalować C i napisać program, który pobierze polecenia dos, uruchom je w powłoce i zapisz wyniki. Polecam korzystanie z Borland Turbo C 2.01. Możesz także napisać kod w Quickbasic, jeśli chcesz napisać kod ... ;-)

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

Osobiście użyłbym DOS 5.5 lub 6, biorąc pod uwagę, że dostaniesz kilka dodatkowych rzeczy.

Gandolf989
źródło
1
Czy to działa w wersji 1.2?
Blake,
A jeśli tak, czy możesz udzielić mi dodatkowej pomocy w instalacji C i jak rejestrować wyniki, dziękuję bardzo.
Blake,
1
@Blake nie działa w wersji 1
edc65
Pomocne byłoby użycie C do napisania programu, gdyby wspomniał o interfejsach API, których użyłbyś podczas pisania takiego programu. (I, oczywiście, wziął pod uwagę wyraźny wymóg w pytaniu, że kod jest kompatybilny z DOS 1.x.) Ta odpowiedź nie odpowiada. Po prostu wysyła link do popularnego kompilatora / pakietu IDE, bez wskazówek dotyczących przydatności takiego zestawu narzędzi.
Cody Gray
Kompilator C ma funkcje stdin i stdout i może uruchamiać polecenia powłoki. Nie wiem, który kompilator działałby w DOS 1. Jeśli tak
martwisz się