Forum

Please consider registering
guest

Log In Register

Register | Lost password?
Advanced Search

— Forum Scope —

  

— Match —

   

— Forum Options —

   

Minimum search word length is 4 characters - maximum search word length is 84 characters

Topic RSS
How to connect VGA to PCI-E?
2014 年 10 月 02 日
21:22:04
roboard
Admin
Forum Posts: 135
Member Since:
2013 年 10 月 05 日
Offline
21

Glaux said
Hi, thanks for your investigation. I didn't know that there's also AMI BIOS for 86Duino is it also available for Zero or only for big EX devboard?

Hi Glaux,
AMI BIOS works on all Vortex86EX boards, including both 86Duino Zero and EX devboard (EX EVB). But since AMI requires license fee on every sold board and isn't open-source, we do not use AMI BIOS on all "Open Hardware" products. ;-)

I think that both ATI FirePro V3750 and Nvidia GeForce 8500GT are not compatible to coreboot/SeaBIOS. I have informed the BIOS engineer to study this issue after his project; if confirmed, it may also be needed to report this to the coreboot/SeaBIOS developers.

2014 年 10 月 02 日
22:17:33
roboard
Admin
Forum Posts: 135
Member Since:
2013 年 10 月 05 日
Offline
22

Hi stevemork,
thank you for insightful suggestions.

1.
We have made a low-end VGA chip, called Vortex86VGA, for the Vortex86EX SoC. The robotics-dedicated 86Duino One can employ this chip on its mini-PCIE slot to have VGA output. And since Vortex86VGA just starts to be produced last month, it needs time to make related boards; here are some WIP prototypes:

http://www.roboard.com/temp/vo.....ex_vga.jpg
http://www.roboard.com/temp/86.....dosboy.jpg

2.
WinXP can run on 86Duino without VGA, and the desktop can be accessed via remote desktop. The lack is a clear tutorial for Windows installation on 86Duino, which is being prepared.

3.
BIOS utilities are only provided to hackers. It is not recommended for novice users (many from the Arduino community, unfamiliar on x86/DOS hacking) to hack the BIOS, because if the BIOS is broken by unguarded operations, 86Duino would fail to boot anymore.

2014 年 10 月 03 日
17:27:47
Glaux
Moderator
Forum Posts: 70
Member Since:
2013 年 10 月 11 日
Offline
23

roboard said
AMI BIOS works on all Vortex86EX boards, including both 86Duino Zero and EX devboard (EX EVB). But since AMI requires license fee on every sold board and isn't open-source, we do not use AMI BIOS on all "Open Hardware" products. ;-)

OK

roboard said
I think that both ATI FirePro V3750 and Nvidia GeForce 8500GT are not compatible to coreboot/SeaBIOS. I have informed the BIOS engineer to study this issue after his project; if confirmed, it may also be needed to report this to the coreboot/SeaBIOS developers.

I belive it's not a general coreboot issue as on other standard desktop motherboards such nvidia/ati cards works. So maybe there would be need some specific initialization routine. Do you have the sources of AMIBIOS or could ask them about how did they initialize VGA?
Any price estimation for Vortex86VGA?

2014 年 10 月 04 日
03:19:12
stevemork
Moderator
Forum Posts: 16
Member Since:
2014 年 09 月 26 日
Offline
24

roboard said
1. We have made a low-end VGA chip, called Vortex86VGA, for the Vortex86EX SoC. The robotics-dedicated 86Duino One can employ this chip on its mini-PCIE slot to have VGA output.

It's the small size of the ZERO (in combination with its low price) which makes it interesting for robotics and other projects. The ONE is too big, and together with an extra VGA unit too expensive also. For this price one can buy other Micro-PCs with integrated VGA having more power.

roboard said
2. WinXP can run on 86Duino without VGA, and the desktop can be accessed via remote desktop.

OK, but which 86Duino? And how do you debug OS installation/starting problems? Remote desktop doesn't help - if the OS is not starting (BSOD etc.) , you don't also have no remote whatever.

2014 年 10 月 06 日
11:19:50
Android_Lin
Moderator
Forum Posts: 228
Member Since:
2014 年 04 月 01 日
Offline

Hello, Glaux

We successfully showed screen by MSTAR Nvidia graphics card (it is also Geforce 8500GT) for coreboot BIOS:

http://www.roboard.com/temp/VG.....ar_VGA.jpg

The issue may be a shadow ram size for coreboot BIOS, and so our BIOS engineer provide a shadow ram patch file for coreboot (download it).
To patch coreboot source code by the below step:

    git apply patch-coreboot-shadow-ram.txt

And then try to show screen by using Nvidia GT230 again.

2014 年 10 月 13 日
15:26:13
roboard
Admin
Forum Posts: 135
Member Since:
2013 年 10 月 05 日
Offline
26

Glaux said
Do you have the sources of AMIBIOS or could ask them about how did they initialize VGA?
Any price estimation for Vortex86VGA?

Hi Glaux,
that AMI BIOS sources are bought a long time ago and then maintained by us. The ATI/Nvidia VGA compatibility issue of coreboot comes from an inadequate default Shadow RAM size, and we will fix it in the next release of SysImage.

The information of the mini-PCIe Vortex86VGA can be found in the link: http://shop.dmp.com.tw/INT/products/87

2014 年 10 月 15 日
11:17:47
Glaux
Moderator
Forum Posts: 70
Member Since:
2013 年 10 月 11 日
Offline
27

Android_Lin said
We successfully showed screen by MSTAR Nvidia graphics card (it is also Geforce 8500GT) for coreboot BIOS:
The issue may be a shadow ram size for coreboot BIOS, and so our BIOS engineer provide a shadow ram patch file for coreboot (download it).
To patch coreboot source code by the below step:
    git apply patch-coreboot-shadow-ram.txt
And then try to show screen by using Nvidia GT230 again.

Hi,
many thanks for your support. I was on vacation last week, so I tried the patch today and it works, finally I got screen with my GT230 :)
Was the problem caused by small shadow RAM size? That would explain why your miniVGA with probably only 32kB VBIOS worked but nvidia with 64kB VBIOS didn't...
Now I'm thinking about patching the crossbar regs to enable PS/2 keyboard interface on some free port to get real DOS console...

Here's my binary coreboot build if someone else wanna try
http://www30.zippyshare.com/v/...../file.html
download file on SD and flash with
anybios w coreboot.rom skipmac

2014 年 10 月 15 日
22:32:28
stevemork
Moderator
Forum Posts: 16
Member Since:
2014 年 09 月 26 日
Offline
28

Hello Glaux, hello 86Duino-Team,

I would like to write a fully working Software-VGA with Windows VGA driver and DOS VGA BIOS, so the 86Duino Zero will become a fully working PC without needing additional hardware VGA. As Glaux said he will realize a PS/2 connect for the same purpose.

But to do this I need your cooperation. We have to map a RAM range of 16kB at B8000h to be used as Text-Video-RAM, a thing that may be you can do easier than me. (For the Graphics-RAM I can use standard RAM everywhere.)

Interested anyone?

Best regards
Steve

2014 年 10 月 17 日
14:04:56
roboard
Admin
Forum Posts: 135
Member Since:
2013 年 10 月 05 日
Offline

stevemork said
But to do this I need your cooperation. We have to map a RAM range of 16kB at B8000h to be used as Text-Video-RAM, a thing that may be you can do easier than me. (For the Graphics-RAM I can use standard RAM everywhere.)

Hi stevemork,
it is possible to map A0000h~BFFFFh to DRAM by SMM register; see this for information: http://www.roboard.com/temp/SMM_B800.jpg

2014 年 10 月 17 日
20:33:41
Glaux
Moderator
Forum Posts: 70
Member Since:
2013 年 10 月 11 日
Offline

stevemork said
I would like to write a fully working Software-VGA with Windows VGA driver and DOS VGA BIOS, so the 86Duino Zero will become a fully working PC without needing additional hardware VGA.

Do you mean emulated VGA output over serial port or what should be the output?
When I explored Coreboot/SeaBIOS wiki I found there's a link to similar project that realize it as option ROM module for SeaBIOS. It use ANSI control codes to allow color termianl output. Like a BBS on terminal in 90-ties :)
So try to look at before you start own project. I didn't have time to check it yet.

I think that ideal operation would be some kind of autodetection - if external PCIE VGA will be detected it will be used and if not, the emulation module will be loaded.

2014 年 10 月 19 日
18:45:52
stevemork
Moderator
Forum Posts: 16
Member Since:
2014 年 09 月 26 日
Offline
31

roboard said
it is possible to map A0000h~BFFFFh to DRAM by SMM register; see this for information: http://www.roboard.com/temp/SMM_B800.jpg

Thanks for this info! It will help to get the job done.

But there is one thing I can not understand: 86Duino claims to be an open system - why do we have to worm out every piece of information? Shouldn't the datasheet your excerpt is from be publicly available? Do you expect the community to open their (hard worked for) development sources if you are not willing to do this on your part?

Glaux said
Do you mean emulated VGA output over serial port or what should be the output?

The VGA monitor is connected directly to 86Duino Zero or One. (The 86Duinos are technically able to generate the VGA hardware signals directly.)

The DOS part will be a BIOS extension providing int 10h video services. It will be made of a DOS TSR to be loaded on demand. It may later also auto-detect presence of a real graphics card and load only if needed. And it may have an option to unload it.

The Windows part will be a standard Windows Driver like you install for any other graphics card. It may live in coexistance with other driver for real graphics card. It may also provide services like extended or mirrored desktop etc.

2014 年 10 月 19 日
21:42:32
Glaux
Moderator
Forum Posts: 70
Member Since:
2013 年 10 月 11 日
Offline
32

BTW is it necessary to use PS/2 keyboard when there's USB host port? I read that coreboot should support USB HID KB but when I plug it in it doesn't initilaize. Anyway I add PS2 port to not block the USB port but I would like to know if possible or not

stevemork said
The VGA monitor is connected directly to 86Duino Zero or One. (The 86Duinos are technically able to generate the VGA hardware signals directly.)

How? I didnt' see that this Vortex86EX have any kind of VGA hardware. Do you mean conneting some external RAMDAC to GPIO to make RGB output?

2014 年 10 月 19 日
22:56:23
stevemork
Moderator
Forum Posts: 16
Member Since:
2014 年 09 月 26 日
Offline
33

Glaux said
How? I didnt' see that this Vortex86EX have any kind of VGA hardware. Do you mean conneting some external RAMDAC to GPIO to make RGB output?

No, you just need to connect some resistors (R2R) between 86Duino GPIO and VGA-Monitor. They are the "DAC". See "Arduino Uno VGA" in WWW. I tried this and it is really working.

2014 年 10 月 20 日
12:28:12
Glaux
Moderator
Forum Posts: 70
Member Since:
2013 年 10 月 11 日
Offline
34

stevemork said
No, you just need to connect some resistors (R2R) between 86Duino GPIO and VGA-Monitor. They are the "DAC". See "Arduino Uno VGA" in WWW. I tried this and it is really working.

Yes I understand but I doubt it would work because of need a precise timing at very high speed. For basic VGA it's about 25MHz, it cannot be simply interrupt driven. Maybe with help of DMA but single DMa transfer will not cover entire screen so more interrupts wil be needed. And don't forget that your ISR share time with other ISRs and maybe SMI handlers...

2014 年 10 月 20 日
14:51:05
roboard
Admin
Forum Posts: 135
Member Since:
2013 年 10 月 05 日
Offline

stevemork said
why do we have to worm out every piece of information?

Hi, all sources of 86Duino PCB and firmware are put in this site. All 86Duino-specific I/O, such cross-bar, GPIO, I2C, and SPI registers, ..., are described in the given Vortex86EX datasheet. For other advanced x86 info, such as SMM, you should refer to Intel programmer's guides.

Considering x86 is much more complex than many MCU systems (such as AVR and PIC) and few people have capability to hack every details of x86 BIOS (and hacking BIOS could make 86Duino fail to boot), some very low-level hardware information dedicated to BIOS hacking is only provided to x86 hackers by requests.

2014 年 10 月 20 日
17:15:10
Glaux
Moderator
Forum Posts: 70
Member Since:
2013 年 10 月 11 日
Offline
36

roboard, you have wrote that
"Zero and One use USB keyboard/mouse, which are both supported by BIOS."
I tried USB keyboard attached to host connecector (same as usb flash when I did bios recovery) but it seems to not initialize, neither numlock doesn't react. Is there needed some further initialization to make USB HID devices work?

2014 年 10 月 21 日
19:19:49
Android_Lin
Moderator
Forum Posts: 228
Member Since:
2014 年 04 月 01 日
Offline
37

Hello, Glaux
The code of SeaBIOS USB part is not very strict to cause the compatible issues on EX USB controller, so we need to patch it.
Download the patch file: http://www.roboard.com/temp/pa.....b-init.txt

And then patch it by the below step:

  git checkout 5aef563
  git apply patch-seabios-usb-init.txt

2014 年 10 月 21 日
22:57:39
stevemork
Moderator
Forum Posts: 16
Member Since:
2014 年 09 月 26 日
Offline
38

Glaux said
Yes I understand but I doubt it would work ...

86Duino SPI can spit out the pixels with 50MHz, this might be sufficient for 1024*768. May be few colors only or B/W, but this should merely be a debugging aid, not a full featured photo processing workstation Wink

Android_Lin said
... code of SeaBIOS USB ... need to patch it ...

If you rebuild the BIOS, I would very much appreciate if you can make it avaliable for download again.

2014 年 10 月 21 日
23:05:31
stevemork
Moderator
Forum Posts: 16
Member Since:
2014 年 09 月 26 日
Offline
39

Hi 86Duino-Team,

I learned in library source that I can attach an Interrupt to SPI by SPIClass::attachInterrupt(). But which INT or address will be called? Can sombebody help me?

Regards
steve

2014 年 10 月 22 日
12:25:47
roboard
Admin
Forum Posts: 135
Member Since:
2013 年 10 月 05 日
Offline

stevemork said
I learned in library source that I can attach an Interrupt to SPI by SPIClass::attachInterrupt(). But which INT or address will be called?

The implementation of SPIClass::attachInterrupt() in 86Duino follows that behavior defined in Arduino UNO, which only enables SPI's IRQ and no ISR is attached (moreover, SPIClass::attachInterrupt() is an empty function in the implementation of Arduino Due; that is, SPIClass::attachInterrupt() is actually a useless function in Arduino).

So you may need to install SPI's ISR by yourself. 86Duino's SPI interface is a PCI device with VID 17F3h and DID 1710h, and you can find the SPI IRQ number and base address in its PCI configuration space. (The BIOS sets the SPI IRQ number to IRQ 3 by default; note that IRQ 3 is also shared by COM2/4/8/10.) You can find the SPI register spec in the Vortex86EX datasheet pp.589~597. Note that 86Duino's SPI doesn't support DMA and so the CPU I/O access time might become an timing obstacle in implementing soft-VGA. Another timing obstacle is possibly the interrupt latency; since SeaBIOS always disables interrupts within BIOS routines (e.g., the timer ISR on IRQ 0) and the DPMI server of DJGPP can produce 30us~40us latency in case of real/protected mode switching, the interrupt latency of SPI would be as long as 80us~90us in the worst case.

86Duino provides an IRQ library for ISR installation; see irq.h for related API (https://github.com/roboard/86Duino/blob/master/hardware/86duino/x86/cores/arduino/irq.h). And you may refer to the implementation of _twi_init() (https://github.com/roboard/86Duino/blob/master/hardware/86duino/x86/libraries/Wire/utility/twi.cpp) in the Wire (I2C) library for the usage of the IRQ library.

Forum Timezone: Asia/Taipei

Most Users Ever Online: 229

Currently Online:
3 Guest(s)

Currently Browsing this Page:
1 Guest(s)

Top Posters:

Dinosaur: 27

leutenecker: 13

mrZagg: 10

hippy: 9

smeezekitty: 8

lukeross: 8

tomka: 8

Ekkehard: 8

UIdahoCIT: 8

blaxxun: 7

Member Stats:

Guest Posters: 0

Members: 1573

Moderators: 15

Admins: 5

Forum Stats:

Groups: 2

Forums: 11

Topics: 248

Posts: 1114

Newest Members: Dennissot, bb4000, Ovendaanalolymn, Ling ChengYU, EROGurnedo, Alfredhak, Davidherie, Nelsonbok, EugeneDut, RobertOwell

Moderators: Glaux: 70, uaa: 11, guigra: 17, asian55: 22, Android_Lin: 228, bcarroll: 12, cucubutter: 84, recycled-air: 12, stevemork: 16, zerozaber: 52, pongraczi: 26, jejump: 14, George Andrews III: 56, poto: 11, garpastym: 20

Administrators: eveshih: 1, anthony: 31, viky6: 0, roboard: 135, hcl: 1