> -----Original Message----- > From: qemu-devel-bounces+jaeyong.yoo=samsung....@nongnu.org [mailto:qemu- > devel-bounces+jaeyong.yoo=samsung....@nongnu.org] On Behalf Of Laszlo > Ersek > Sent: Thursday, May 15, 2014 11:05 PM > To: Jaeyong Yoo; qemu-devel@nongnu.org > Subject: Re: [Qemu-devel] Where is vga-rom mapped in guest system memory? > > On 05/15/14 15:25, Jaeyong Yoo wrote: > >> I rely on the qemu debug port rather than on serial: > >> > >> -debugcon file:debug.log -global isa-debugcon.iobase=0x402 > >> > >> Check the DEBUG_IO and DEBUG_LEVEL settings in the SeaBIOS config as > well. > > > > Thanks Laszlo! Now I can see the log message in VirtualBox vgabios > > with qemu debug port. > > > > By the way, I've got one more question, which is very strange for me. > > > > I tried to print a string and the values read by the string address do > > not look correct. More specifically, I wrote the following code in > VirtualBox vga-bios: > > > > char *msg = "Start Vgabios\n"; > > > > for (i = msg; ++i; *i != 0) > > { > > outb(0x402, *i); > > } > > > > And, I expect to see the message "Start Vgabios" in the debug port, > > but it doesn't work. If I object-dump the related parts in VirtualBox > > vga-bios, I can see that the msg (msg = 0x7eea) properly contains > > "Start Vgabios". And, if I print the value of i in vga-bios, it gives > > 0x7eea (which is correct address). Then I expect that *i should be 'S' > > but *I gives zero. I checked the vga-rom size field and it properly > > covers the actual size of vgarom. Then, I think qemu properly map the > entire vgarom in the proper, so it won't be an issue. > > > > Is there some issues with memory addressing that I'm missing? > > You are probably in real mode. The above outb() loop probably translates > to something like this: > > 00000000 3E8A04 mov al,[ds:si] > 00000003 BA0204 mov dx,0x402 > 00000006 EE out dx,al > 00000007 46 inc si > > (objdump -S will allow you to see it exactly.) > > My take is that ds is not set correctly. You might have to set ds manually, > or at least decorate the definition of the string with some gcc section > attribute so that the compiler places the string in a section that will be > "automatically" matched by ds. > > Or, you might be able to test it like this: > - first, change the type of "msg" from "pointer to character" to "array of > characters": > > char msg[] = "Start Vgabios\n" > > - second, give it automatic storage duration, rather than static storage > duration. In English, make it local to the function containing the loop. > Hopefully the compiler will generate code that places the string on the > stack then, and then your loop body will (hopefully) look something like > > 00000000 368A02 mov al,[ss:bp+si] > 00000003 BA0204 mov dx,0x402 > 00000006 EE out dx,al > 00000007 46 inc si > > (Ie. work off your stack, where ss and bp should be "just right".) > > I'm just guessing of course.
Thanks a lot Laszlo, The problem was ds as you guessed! After I set ds the same as cs, I can see log messages correctly! And, I can start porting VirtualBox vgabios to work on qemu. By the way, would there be no-issue of VBox vgabios (16-bit code) working with seaBIOS? I'm guessing not, but I want to double check. Thanks, Jaeyong