Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
PC-Emulation => I/O auf Konsole
oreissig Offline
Maître Modérateur

Beiträge: 11.991
Registriert seit: Jul 2008
Beitrag #1
PC-Emulation => I/O auf Konsole
Also die Sache beschäftigt mich schon länger, aber nun will ich sie mal genauer angehen.
  • Endziel: ein einfaches DOS auf meinem HP Jornada (=> NetBSD) emuliert haben
  • Problem: X suckt darauf, weil:
  1. zu lahm
  2. Bildschirm mit 240pixeln zu flach für....restlos alles
  • Idee: Man bräuchte einen PC-Emulator, dessen BIOS die Fähigkeit besitzt, die Ein-/Ausgabe bei verwendung der normalen Interrupts auf einen seriellen Port umzuleiten (von dort könnt ichs dann einfach abgreifen, idealerweise würde das direkt der Emulator für mich machen)
So der Plan, also mal bissl geschaut und in qemu die Option -nographic entdeckt, ich zitiere:
Zitat:Normally, QEMU uses SDL to display the VGA output. With this option, you can totally disable graphical output so that QEMU is a simple command line application. The emulated serial port is redirected on the console. Therefore, you can still use QEMU to debug a Linux kernel with a serial console.
Das Problem dabei ist, dass das BIOS (afaik ja von Bochs) sich dessen nicht bewusst ist, daher muss man blind booten und dann irgendwann ein OS laufen haben, was dann Konsole auf COM1 anbietet.
Das kann man bei Linuxen so einstellen (default ists afaik bei den meisten nicht), DOS kanns gar nicht.

Da man bei DOS wohl nur wenig rumtweaken kann, wärs schon ideal, wenn das echt transparent laufen würde, wenn eben z.B. das BIOS sich dessen bewusst wäre. Solche BIOSe scheints übrigens wirklich zu geben:
Zitat:von Optionally configure the BIOS
Some BIOSs provide support for serial consoles. If your computer's BIOS is one of these you should investigate the extent of the support provided. Depending upon the extent of serial console support you may not need to explicitly configure the boot loader to use the serial port.
[...]
The BIOS takes the interrupt 0x10 "video" requests used to write to the screen and sends the characters that would have appeared on the screen to the serial port. Characters recieved from the serial port are used to supply characters to BIOS interrupt 0x16 "read key" requests.
Any 16-bit application which uses the BIOS functions for outputing text to the screen and reading from the keyboard is redirected to the serial port. This includes the BIOS itself, the boot loader, and 16-bit operating systems (such as MS-DOS).
Okay, so jetz seid ihr gefragt: Wie kann ich das nun lösen?
Ich bin nicht an QEMU gebunden, war nur das erste was mir eingefallen ist
Weiß nicht, in wiefern man das Bochs-BIOS selbst modifizieren kann, um sowas zu supporten
Gäbe es vll noch alternative BIOSe, die man in $EMULATOR$ einbinden kann? Gäng das vll sogar mit sowas wie coreboot?
20.06.2009 16:13
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
chiaki Offline
Die Pommesfee

Beiträge: 12.534
Registriert seit: Jul 2008
Beitrag #2
PC-Emulation => I/O auf Konsole
ctty
20.06.2009 16:23
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.952
Registriert seit: Jul 2008
Beitrag #3
PC-Emulation => I/O auf Konsole
Wie chiaki sagte, wenns um DOS geht, ctty und dann umleiten auf die serielle Schnittstelle. Geht zwar leider auch nicht alles (wenns um "Vollbild" und so geht), sondern nur stdout.

Ich habe aus anderen Gründen (chkdsk zum NTFS-Datenträger überpüfen) auch schon eine solche Funktion für gesucht. QEMU bietet unter Linux zumindest auch eine ncurses-Ausgabe an (-curses), damit soll die BIOS-Aufgabe aufs Terminal gemappt werden können. Hat bei mir leider nicht mit MS-DOS und der Windows Wiederherstellungskonsole funktioniert. Vielleicht verwende ich aber auch einen schlechten Terminal-Emulator.
20.06.2009 16:29
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
oreissig Offline
Maître Modérateur

Beiträge: 11.991
Registriert seit: Jul 2008
Beitrag #4
PC-Emulation => I/O auf Konsole
gandro schrieb:  Wie chiaki sagte, wenns um DOS geht, ctty und dann umleiten auf die serielle Schnittstelle. Geht zwar leider auch nicht alles (wenns um "Vollbild" und so geht), sondern nur stdout.
jo das war mir eigentlich schon bewusst, wobei ich nich genau weiß, wieviele nun wirklich die DOS-interrupts nutzen. Geht so EDIT.COM und alles damit überhaupt nich?
Bin Ausgabeumleitung nur von unixen gewöhnt, und da geht halt ziemlich viel

gandro schrieb:  QEMU bietet unter Linux zumindest auch eine ncurses-Ausgabe an (-curses), damit soll die BIOS-Aufgabe aufs Terminal gemappt werden können.
also ich habs mal auf die schnelle probiert:
[Bild: qemu-curses.png]
aber irgendwie fehlt da u.a. local echo und allgemein is das indeed semi-optimal


am coolsten wärs eben schon, wenn ich das gast-OS nicht modifizieren müsste sondern einfach ne normale clean install machen könnte.
20.06.2009 16:48
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
oreissig Offline
Maître Modérateur

Beiträge: 11.991
Registriert seit: Jul 2008
Beitrag #5
PC-Emulation => I/O auf Konsole
okay habs jetzt also doch über den uneleganten weg gemacht und setze abhängigkeit des Gasts voraus, dafür wars einfach :D

hab mir ne MS-DOS 6.22 Startfloppy geholt, sie normal gebootet und "CTTY COM1" in die autoexec.bat eingefügt
Danach qemu mit -nographic starten, bissl warten und tada:
[Bild: qemu%2Bdos.png]

aber "edit" einzugeben ist echt tödlich :D
20.06.2009 18:18
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste