บันทึกผลลัพธ์ของคำสั่งในไฟล์ MS-DOS 1.x


27

ดูเหมือนว่า[COMMAND]>[FILE]จะไม่ทำงานใน MS-DOS รุ่นแรก ฉันใช้ MS-DOS 1.25 invalid argumentและการแสดงออกดังกล่าวข้างต้นจะช่วยให้คำสั่ง

อัปเดต : เนื่องจากเป็นความจริงที่ว่ามันไม่ทำงานใน DOS 1.x ดังนั้นจึงเป็นไปได้ที่จะรับเอาต์พุตนั้นโดยใช้ฟังก์ชันบางอย่างของกล่องเสมือนหรือพูดโดยรับเอาท์พุทจากไฟล์บันทึกบางไฟล์


18
ทำไมคุณใช้ DOS 1.25!
Keltari

41
@Keltari: ไม่มีการแจ้งเตือนการอัปเดต Windows 10 ที่น่ารำคาญ
Mark K Cowan

6
หากคุณมีคำถามอื่น ๆ เกี่ยวกับการตั้งค่าของคุณที่ไม่ได้อยู่ในหัวข้อนี้ลองใช้Retrocomputingไซต์ SE อื่นที่ทุ่มเทให้กับสิ่งนั้น (การเปิดเผยอย่างเต็มรูปแบบ: ฉันอาจมีส่วนเกี่ยวข้องกับเว็บไซต์นั้นเล็กน้อย)
wizzwizz4

4
คำถามนี้ทำให้ฉันรู้สึกหนุ่มอีกครั้ง!
Dmitry Grigoryev

9
MS-DOS 1.x เป็นโคลน CP / M เป็นหลักโดยที่ Ctrl-P ทริกเกอร์การคัดลอกเอาต์พุตคอนโซลไปยังเครื่องพิมพ์ ดังนั้นวิธีการที่คล้ายกันอาจเป็นไปได้ใน MS-DOS ด้วย
Thorbjørn Ravn Andersen

คำตอบ:


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 driver / พอร์ตอนุกรม / โซลูชันการถ่ายโอนข้อมูลหน่วยความจำสำหรับ quemu / dosbox / virtualbox

  • ค้นหาโปรแกรมอรรถประโยชน์ OLD บางโปรแกรมจาก 80 ซึ่งอาจมีคนเขียนกลับไปที่นั่นเพื่อจุดประสงค์นี้

  • เพิ่มแท็ก freedos ที่นี่ (หรือแม้แต่ย้าย / ทำซ้ำคำถามของคุณใน stackoverflow ใหญ่ฉันคิดว่ากูรูบางคนควรรู้ปัญหาเกี่ยวกับสิ่งนี้

ฉันจะอัปเดตในภายหลังหากพบสิ่งที่น่าสนใจ แต่คุณสามารถเปิดเผยรายละเอียดเกี่ยวกับสาเหตุที่คุณใช้ 1.25 ได้โปรแกรมนี้ใช้กับ msdos รุ่นใหม่กว่าได้หรือไม่ ฉันพนันได้เลยว่าคุณจะได้พบกับแฮ็กเกอร์แอสเซมบลีรุ่นเยาว์ที่กระตือรือร้นที่จะแก้ไขโปรแกรมนี้ให้เป็นเวอร์ชั่นใหม่กว่า (หรือเพิ่มไฟล์เอาต์พุตด้วย asm) โดยเสียค่าธรรมเนียมเล็กน้อย


คุณช่วยให้ข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการนั้นได้ไหม
Blake

@Blake อัปเดตดูเหมือนว่าจะinfo vgatextทำงานได้ทุกอย่างที่คุณต้องทำคือการเขียนสคริปต์ที่ถูกต้องสำหรับการดีบั๊กมันดูเหมือน
oddqargo

ข้อมูลที่คุณให้นั้นน่าสนใจมาก ในความเป็นจริงมันอาจเป็นประโยชน์อย่างยิ่งสำหรับสถานการณ์ของฉัน ฉันใช้สิ่งนี้กับแอปพลิเคชันเก่าซึ่งฉันต้องการเข้าใจว่ามันทำงานอย่างไรโดยให้อินพุตและรับเอาต์พุตโดยอัตโนมัติ อาจไม่ใช่วิธีที่ดีที่สุด แต่ฉันต้องการทำเช่นนี้ ขอบคุณสำหรับคำตอบเพียงแค่ให้ฉันสองหรือสามวันในการอ่านคู่มือนี้และเขียนสคริปต์บางอย่าง (หวังว่ามันจะเป็นไปได้) และจะให้ข้อมูลเกี่ยวกับการทำงานของมัน ขอบคุณมาก.
Blake

1
หากฉันยังไม่ได้ทำเครื่องหมายคำตอบฉันจะทำเครื่องหมายอย่างแน่นอน ขอบคุณสำหรับความช่วยเหลือจากทุกคน
เบลค

1
ฉันต้องการเอาท์พุทของแอปพลิเคชันเป็นข้อความ ในเอกสารอธิบายถึงวิธีการใช้คอนโซลการดีบักในเทอร์มินัล การใช้ VBoxManaged debugvms <ชื่อของเริ่มต้นแล้วในโหมดดีบัก VM> ข้อมูล vgatext มันพิมพ์หน้าจอในโหมดเทอร์มินัลและพวกเขาใช้การเปลี่ยนเส้นทางและการแยกวิเคราะห์แบบง่าย ๆ ฉันจัดการเพื่อให้ได้สิ่งที่ฉันต้องการ ขอขอบคุณ.
Blake

40

ดูเหมือนว่า [COMMAND]> [FILE] ไม่ทำงานใน MS-DOS เวอร์ชั่นแรก

ฉันใช้ MS-DOS 1.25 และนิพจน์ด้านบนให้อาร์กิวเมนต์ที่ไม่ถูกต้อง

ถูกต้อง. สิ่งที่คุณต้องการทำไม่สามารถทำได้ใน v1.25

การเปลี่ยนเส้นทางคำสั่ง (พร้อมกับการปรับปรุงอื่น ๆ ) ถูกเพิ่มใน v2.0

MS-DOS เวอร์ชั่น 2.0 (เทียบเท่ากับ PC-DOS 2.0) เปิดตัวครั้งแรกในเดือนมีนาคม พ.ศ. 2526 ในระบบปฏิบัติการใหม่แบบย้อนหลัง (แม้ว่าจะได้รับการดูแลอย่างดีเพื่อรักษาความเข้ากันได้กับ MS-DOS รุ่น 1) มันมีนวัตกรรมที่สำคัญมากมายและคุณสมบัติที่ได้รับการปรับปรุงรวมถึงสิ่งที่แสดงในหน้าต่อไปนี้

  • รองรับฟล็อปปี้ดิสก์ความจุสูงและฮาร์ดดิสก์
  • ฟีเจอร์ที่คล้ายกับ UNIX / XENIX มากมายรวมถึงโครงสร้างไฟล์แบบลำดับชั้นการจัดการไฟล์การเปลี่ยนเส้นทาง I / O ไปป์และตัวกรอง
  • การพิมพ์พื้นหลัง (การพิมพ์สปูล)
  • ป้ายกำกับปริมาณรวมถึงคุณสมบัติไฟล์เพิ่มเติม
  • ไดรเวอร์อุปกรณ์ที่ติดตั้งได้
  • ไฟล์การกำหนดค่าระบบที่ผู้ใช้สามารถปรับแต่งได้ซึ่งควบคุมการโหลดไดรเวอร์อุปกรณ์เพิ่มเติมจำนวนบัฟเฟอร์ดิสก์ระบบและอื่น ๆ
  • การบำรุงรักษาบล็อกสภาพแวดล้อมที่สามารถใช้เพื่อส่งผ่านข้อมูลระหว่างโปรแกรม
  • ไดรเวอร์การแสดงผล ANSI เผื่อเลือกที่อนุญาตให้โปรแกรมจัดตำแหน่งเคอร์เซอร์และควบคุมคุณสมบัติการแสดงผลในลักษณะที่ไม่ขึ้นกับฮาร์ดแวร์
  • รองรับการจัดสรรแบบไดนามิกการดัดแปลงและการปล่อยหน่วยความจำโดยแอปพลิเคชันโปรแกรม
  • สนับสนุนล่ามคำสั่งผู้ใช้ที่กำหนดเอง (เชลล์)
  • ตารางระบบเพื่อช่วยซอฟต์แวร์แอปพลิเคชันในการปรับเปลี่ยนสกุลเงินเวลาและรูปแบบวันที่ (รู้จักกันในชื่อการสนับสนุนระหว่างประเทศ)

แหล่งโปรแกรม MS-DOS ขั้นสูงโดย Ray Duncan


ฉันควรทำอะไรแทน

วิธีแก้ปัญหาที่เป็นไปได้คือการจับภาพหน้าจอ (เป็นข้อความ) และแยกวิเคราะห์ผลลัพธ์

คำตอบสำหรับคำถามนี้การดักจับหน้าจอใน DOSแสดงรายการโปรแกรม TSR (ยุติ แต่อยู่ต่อ) ที่เป็นจุดเริ่มต้นให้คุณตรวจสอบ


13
คำตอบที่ดี มีเพียงผู้ใช้ระดับสูงที่สุดเท่านั้นที่สนใจ MS-DOS 1.0
ฉันพูดว่า Reinstate Monica

ขอบคุณสำหรับคำตอบของคุณฉันขอขอบคุณ แต่ฉันต้องการหาวิธี (พูดโดยใช้ฟังก์ชั่นกล่องเสมือน) นั่นคือเหตุผลที่ฉันจะไม่ทำเครื่องหมายว่ามันเป็นคำตอบในขณะนี้
Blake

@Blake วิธีแก้ปัญหาที่เป็นไปได้คือการจับภาพหน้าจอ (เป็นข้อความ) และแยกวิเคราะห์ผลลัพธ์ ฉันได้อัพเดตคำตอบแล้ว
DavidPostill

ฉันขอโทษล่วงหน้าสำหรับความล่าช้าของผลลัพธ์เมื่อพยายามใช้โปรแกรม tsr นี้ ทันทีที่ฉันเข้าถึงเครื่องของฉันฉันจะแจ้งให้คุณทราบ มันเป็นทางเลือกที่ยอดเยี่ยมและฉันหวังว่าจะทำงานได้อย่างถูกต้อง จำเป็นหรือไม่ที่จะต้องติดตั้งโปรแกรมอื่น ๆ (ซึ่งตัวอย่างเช่นสร้างสภาพแวดล้อมทีเอสอาร์นี้)?
เบลค

1
@Blake ไม่ใช่ว่าฉันจำได้ แต่มันก็เป็นเวลาหลายปีแล้วที่ฉันใช้ 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 เนื่องจากมีบางสิ่งเพิ่มเติมที่คุณจะได้รับ


1
ทำงานได้ใน v1.25 หรือไม่
เบลค

และถ้าเป็นเช่นนั้นคุณสามารถให้ความช่วยเหลือเพิ่มเติมเกี่ยวกับการติดตั้ง C และวิธีบันทึกผลลัพธ์ได้หรือไม่ขอบคุณมาก
Blake

1
@Blake มันไม่ทำงานใน v1
edc65

การใช้ C เพื่อเขียนโปรแกรมจะเป็นคำตอบที่มีประโยชน์ถ้ามันกล่าวถึง API ที่คุณจะใช้เมื่อเขียนโปรแกรมดังกล่าว (และแน่นอนคำนึงถึงข้อกำหนดที่ชัดเจนในคำถามที่ว่ารหัสนั้นเข้ากันได้กับ DOS 1.x) คำตอบนี้ไม่ได้ มันแค่ส่งลิงก์ไปยังแพ็คเกจคอมไพเลอร์ / IDE ยอดนิยมโดยไม่มีคำแนะนำเกี่ยวกับความเกี่ยวข้องของชุดเครื่องมือดังกล่าว
Cody Gray

คอมไพเลอร์ C มีสิ่งอำนวยความสะดวกสำหรับ stdin และ stdout และสามารถเรียกใช้คำสั่งเชลล์ ฉันไม่รู้ว่าคอมไพเลอร์ตัวไหนจะทำงานใน DOS 1 ถ้าคุณกังวลเกี่ยวกับการดูแลบอร์ดคำถามที่ดีกว่าก็คือทำไมทุกคนจะเขียนโค้ดสำหรับ MS DOS 1 ...
Gandolf989
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.