Old Interrupts

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Rob

Re:Old Interrupts

Post by Rob »

Pype: that's what I thought, thanks.

Kemp: yeah, that sounds like a very daunting task. I took a look around the BeOS drivers and they seem to have some major aries covered. No Intel or SiS or S3, though. Even though that information is mostly freely available. Go figure.

(some general comments)
Isn't V86 mode no longer available in long-mode (ie, 64-bit)? If so "we" are going to have additional problems in the near future.

I can't believe all these graphics card manufacturers are this tight lipped about there stuff. You would think they would like to have it running on as much different systems as possible. It's not like exposing an API (especially the 2D + resolution stuff) is gonna help your competitors, who no doubt already have your driver source through some leak in your company or reverse engineering.

Kemp's idea would be nice to see executed, but I won't hold my breath ;) I am a bit suprised the BeOS / Unix etc. of these world haven't setup such a document / database yet.

Oh well....
User avatar
Candy
Member
Member
Posts: 3882
Joined: Tue Oct 17, 2006 11:33 pm
Location: Eindhoven

Re:Old Interrupts

Post by Candy »

If somebody's gonna set up such a document, got a test driver for bochs-with-vbe-without-bios set up somewhere on my laptop. Tried it with resolution switching with just ports and that works. Didn't try writing to it though (only realmode stuff, no access to 0xE0000000), but that should work. Dunno how to detect bochs vbe though.
Rob

Re:Old Interrupts

Post by Rob »

If you just want to know if VESA is there, this is some code that's working for me:

Code: Select all

VESA_SIGNATURE         equ   'ASEV'   ; VESA reversed

....

            ; vesa info needs a 256 byte buffer, use some memory above this code
            mov      ax, 2000h
            mov      es, ax
            xor      di, di
            mov      ax, 4F00h
            int      10h
            
            cmp      ax, 4Fh
            jne      NoVesa
            cmp      ES:[VesaInfo.VesaSig], VESA_SIGNATURE
            jne      NoVesa


....


VesaInfo   struc
            VesaSig         dd   ?
            VesaVersion      dw   ?
            VesaVendorOffset   dw   ?
            VesaVendorSegment   dw   ?
            VesaCapabilities   dd   ?
            VesaModesOffset      dw   ?
            VesaModesSegment   dw   ?
            VesaMemory      dw   ?   ; in 64K blocks
VesaInfo   ends
That code assumes 16-bit real-mode and 256 bytes available at 2000h:0000h

From some looking around it also seems there is a signature 'VBE2', I haven't encountered it yet though. First need to look up some info on that.

VesaModesSegment and VesaModesOffset point to a table containing 16-bit Vesa mode numbers, terminated by a 0FFFFh. This table *can* reside *inside* your 256 byte structure. So if you use int 10h function 4F01h to query each mode (which requires a 256 byte buffer again) do not use the same one. You may still need it :)
Kemp

Re:Old Interrupts

Post by Kemp »

Currently working my way through ATI's extended registers (for the older cards), there is a hell of a lot of them, lol ;D What I'm basically going to try to do is keep all the info from different sources seperate for now and eventually combine any that came with the same license. That way if you only want to know stuff that came from GPL'd code/docs you could just grab that, though I don't think there'll be too much trouble with licensing as I'll essentially be doing clean-room reverse engineering (ie, I make a list of what the seperate registers do, along with possibly some pseudo-code for various things and whoever uses them has to come up with their own implementation).

Of course, I'm not an expert as regards licensing, so anyone who knows better should probably correct me ;)
JAAman

Re:Old Interrupts

Post by JAAman »

no, as far as i know, intel has never even stated a market share number (that number is quoted from anandtech)

yes, anyone who plays alot of games, will prefer either ATI or nVidia -- but most people don't play any [graphically intense] games (this doesn't include simple card games to pass the time, of course)

and even if you do play some, intels newer chips are quite capable of playing even the most demanding games (though you will prob want to limit resolution to 800x600, and only use medium quality settings)

the only reason to purchase a add-on video card, is if you are a hard-core gamer (or you have specific needs -- such as multiple monitors)

that number is found by examining all the major computer retailers, and finding what cards are in the computers they sell -- most people wouldn't know how to add a video card (and many -- if not most -- pre-built computers with integrated video, cannot be upgraded, because they don't even have an AGP (or PCIe x16) slot to put a card into)

now i have a separate card (Gforce-4mx) and my brother (6800GS) and my parents (7500-AIW)

but if you notice, my brother is a hard-core gamer, mine is a P-III -- which predates good integrated video, and my parents is a video capture card (and a very old one at that)

this is obviously not the normal situation (esp. since all three are self-built)

there are many people who do use ATI or nVidia cards, but most do not -- integrated video saves you $100+ over a add-in card, and most people have no use for a faster card (esp. since intels newer chips do so well)
blipzor

Re:Old Interrupts

Post by blipzor »

Rob wrote: VesaModesSegment and VesaModesOffset point to a table containing 16-bit Vesa mode numbers, terminated by a 0FFFFh. This table *can* reside *inside* your 256 byte structure. So if you use int 10h function 4F01h to query each mode (which requires a 256 byte buffer again) do not use the same one. You may still need it :)
I hope I remember that advice about keeping the VBE info block intact. That could come in very handy as I'm sure I've implemented that wrong. I also suggest you read vbe3.pdf at least 2 or 3 times for the interesting stuff with the higher versions.

Interestingly enough I have read that at least some S3 cards have a secondary modelist past the primary one. I have verified this with my own PCI S3 card with 1MB RAM; the primary list went up to 1600x1200 but the secondary list had 512x384 and 1152x864 and other "non-standard" ones. Of course most of the listed modes could not be set because there was insufficient frame buffer memory on the card but the mode info blocks did state this too. Also I found that WinXP could use the 1152x864 mode if I selected it from the full mode list it has when you click "Advanced..." somewhere.
Rob

Re:Old Interrupts

Post by Rob »

blipzor: yeah, I found that out during testing under I think QEMU. Nice little suprise that was.

I also saw there where some mode flags to tell if hardware supported a given mode. Was that set or not with those modes the card could not support due to memory issues?
Kemp

Re:Old Interrupts

Post by Kemp »

Was that set or not with those modes the card could not support due to memory issues?
the mode info blocks did state this too
;)
Rob

Re:Old Interrupts

Post by Rob »

Reading is an art as well ;) Thanks Kemp!
srg

Re:Old Interrupts

Post by srg »

JAAman wrote:and even if you do play some, intels newer chips are quite capable of playing even the most demanding games (though you will prob want to limit resolution to 800x600, and only use medium quality settings)
No good for me, I don't use Intel :P
Post Reply