VOGONS


VIDEO - Multiple SVGA Chipset patch (commited)

Topic actions

Reply 40 of 343, by vasyl

User metadata
Rank Oldbie
Rank
Oldbie

Funny enough, Virtual Pool uses the same trick as Dawn Patrol. I am not sure if it is split screen implementation that is failing, or odd/even, or something else -- I am getting part of the screen rendered in incorrect position... Again, so close... Currently working on theory that line compare is correct (the problem is not consistent with that feature) and it is odd/even thing. So, I am in vga_memory land once more.

Reply 41 of 343, by ih8registrations

User metadata
Rank Oldbie
Rank
Oldbie

BTW, Linux dosemu already has multiple video chipsets emulated: paradise, et4000, s3, ati, trident, ... so they're there for porting or comparision.

Reply 42 of 343, by Srecko

User metadata
Rank Member
Rank
Member

Great that you have it nearly working, vasyl.
I first tested it with version on sf.net,probably without modifications for dawn patrol (btw. it's possible to update(replace) uploaded file there).

I guess that also VESA mode in virtual pool isn't working because of those unimplemented vga features...
Voting for paradise 🤑

Reply 43 of 343, by ih8registrations

User metadata
Rank Oldbie
Rank
Oldbie

back to rooting out the VESA timeline, finding a consensus here:

http://64.233.187.104/search?q=cache:Acq74Jgq … +bios+1.0&hl=en

http://64.233.187.104/search?q=cache:uvzJwK0c … +1.0+1990&hl=en

(vbe 1.0 & 2.0) http://64.233.187.104/search?q=cache:vcFoGpUu … 0%22+1990&hl=en

(vbe 3.0) http://www.vesa.org/public/VBE/vbe3.pdf

(vbe 1.2) http://64.233.187.104/search?q=cache:VuNpD6Gg … 3VS900602&hl=en

1.1 is vesa standard #VS900602
(vbe 1.1) http://www.filelibrary.com/Contents/DOS/54/97.html

founded 2/89
first spec 8/89 mode 6ah 800x600 16 color (what I christen as vbe 0.0):)
vbe 1.0 10/89
vbe 1.1 6/90
vbe 1.2 8/91
vbe 2.0 11/94
vbe 3.0 9/98

version changes summaries are given in an appendix in each doc.
Definitively, the dates are in the title pages and make up the standard #.

Oh, though they said they wouldn't define any more mode numbers from 2.0 on, 2.0 adds Special Mode number 81FFh. It's a function and not a video mode but it is a "mode" added to the mode list. Being pedantic, their sentence is wrong, but obviously they were referring to new video modes:) vbe 2.0 spec also defines vga standard modes 0-7, d-13 for setting them by vesa. They included this mode block info only in the vbe 2.0 spec.

Reply 44 of 343, by vasyl

User metadata
Rank Oldbie
Rank
Oldbie

Great research! IMHO, VESA was "too little, too late" kind of standard. In 1990 there were dozens of different video cards. Some manufacturers never bothered to update BIOS with VESA, extra TSRs were considered evil. So, most graphics libraries had coded support for many chipsets. I only vaguely remember playing with UniVBE on ET4000 but I don't think I ever had any game that actually required VESA. But again, it was fifteen years ago...
Thanks about DOSEMU tip, somehow I've missed that feature. Last time I checked DOSEMU it could barely run text mode apps. Looks like they've got a lot since.
As for Virtual Pool -- the broken part is definitely in basic VGA functionality so it does affect all SVGA implementations. I would speculate that this issue affects quite a few other SVGA games and probably a few VGA games running in hacked 320x200 modes. IIRC, Quake had a few of those. I still have the very first edition of Quake, let's see what it does.

Reply 46 of 343, by vasyl

User metadata
Rank Oldbie
Rank
Oldbie

This is great, thanks. I had no time to do anything on DOSBox lately 🙁
I double-checked Quake and all hacked modes work fine so whatever's broken, it does not affect non-SVGA modes. Very interesting, considering how simple Virtual Pool driver actually is -- it must be something very fundamental that breaks it but I still cannot tell exactly what's wrong. I will try your fixes and see how's that going.

Reply 47 of 343, by vasyl

User metadata
Rank Oldbie
Rank
Oldbie

All right, I've integrated your changes with mine. Funny, I recalled both VGA testing tools. I even vaguely recall that my Tseng ET4000 actually failed some test in VGATEST... Your changes apparently improve compatibility but Virtual Pool is still broken 🙁 Actually, I expected that -- everything point to sequencer, not CRTC in that case. More work to do.

Reply 48 of 343, by ih8registrations

User metadata
Rank Oldbie
Rank
Oldbie

A game tweaked for paradise vga?

http://64.233.187.104/search?q=cache:PuAs2wl_ … adise+vga&hl=en
http://64.233.187.104/search?q=cache:PuAs2wl_ … adise+vga&hl=en

The original release already included vga so when the paradise version says "special vga version" on the disk, it makes me wonder..

Time to hunt down the paradise version of the game.

mobygames notes it as a tweaked vga game:
http://www.mobygames.com/attribute/sheet/attributeId,7/p,2/

Reply 49 of 343, by eL_PuSHeR

User metadata
Rank l33t++
Rank
l33t++

I think the latter one is called MODE-X. Very popular in the demo scene when they were programming standard VGA.

Tran's demos come to mind. Like Luminati.

Intel i7 5960X
Gigabye GA-X99-Gaming 5
8 GB DDR4 (2100)
8 GB GeForce GTX 1070 G1 Gaming (Gigabyte)

Reply 50 of 343, by ih8registrations

User metadata
Rank Oldbie
Rank
Oldbie

It may be mode-x or "special" paradise(aka uses pvga1a registers/mode for setup/running). Won't really know until someone gets ahold of a copy of the paradise version or find a description of it's video option. mobygames categories are general so you can't assume by their title.

Speaking of special versions, I'd love to get the GUS version of Chuck Yeager's Air Combat again but havn't found a copy online in my searching(a lot). Too bad I don't have the disks anymore:( Still have my Ultrasound though:)
Looked to no avail for the original install disks too(have lots of the later versions).

Last edited by ih8registrations on 2005-05-12, 14:20. Edited 1 time in total.

Reply 51 of 343, by ih8registrations

User metadata
Rank Oldbie
Rank
Oldbie

I may have found the cause for the virtual pool issue by the sequencer. I'm looking at the datasheet for the C & T 65510 vga controller and it says the sequencer has a horizontal character counter reset register: SR07(r/w), that is a standard VGA register which was not documented by IBM. It's not implemented by dosbox. Dun, dun, dun:) It should be case 0x07 in read_p3c5 & write_p3c5.

vgadoc describes it as well. bochs and qemu don't have it implemented.

Reply 52 of 343, by HunterZ

User metadata
Rank l33t++
Rank
l33t++

I'm 95% sure that I have that Paradise version of Indy: Last Crusade game on original 5.25" disks. Unfortunately I don't have a 5.25" disk drive.

I remember running it on a non-Paradise video card though, and it still runs. It doesn't use any special modes that I can see. I think it was just bundled with some Paradise video cards and they pretended that it was special somehow. Or, maybe it runs better if it detects a Paradise card, so I never got to see the difference?

Reply 53 of 343, by ih8registrations

User metadata
Rank Oldbie
Rank
Oldbie

Both r/w_p3c5 have logging for non recognized indexes so check for that when running virtual pool.

Reply 54 of 343, by vasyl

User metadata
Rank Oldbie
Rank
Oldbie

I'll do that. The theory is very plausible but that particular index is not used in the initialization routine:

seg000:00FF		    mov	    ax,	2Eh ; '.'
seg000:0102 int 10h ; - VIDEO - SET VIDEO MODE
seg000:0102 ; AL = mode
seg000:0104 mov dx, 3D4h
seg000:0107 mov ax, 9
seg000:010A out dx, ax ; Video: CRT cntrlr addr
seg000:010A ; maximum scan line
seg000:010B mov ax, 8F18h
seg000:010E out dx, ax ; Video: CRT cntrlr addr
seg000:010E ;
seg000:010F mov ax, 0Dh
seg000:0112 out dx, ax ; Video: CRT cntrlr addr
seg000:0112 ; regen start address (low)
seg000:0113 mov ax, 0Ch
seg000:0116 out dx, ax ; Video: CRT cntrlr addr
seg000:0116 ; regen start address (high)
seg000:0117 mov dx, 3C4h
seg000:011A mov ax, 604h
seg000:011D out dx, ax ; EGA: sequencer address reg
seg000:011D ;
seg000:011E mov dx, 3CEh
seg000:0121 mov ax, 4005h
seg000:0124 out dx, ax ; EGA: graph 1 and 2 addr reg:
seg000:0124 ;
seg000:0125 mov dx, 3C4h
seg000:0128 mov al, 2
seg000:012A out dx, al ; EGA: sequencer address reg
seg000:012A ; map mask: data bits 0-3 enable writes to bit planes 0-3
seg000:012B retf

The blit routine does not mess with the sequencer besides enabling/disabling planes. So, one of the indexes above is not implemented correctly. Odd/even (3c5 index 4) is not doing anything at this moment, that's why I think it is the cause. Of course, that's unless the game actually does some VGA magic outside of the driver, and I did not dig that far yet.

As for Indy3, I don't think it is really Paradise-specific. The original PC version was EGA. That makes VGA "special." I would not be surprised if WD had OEM deal that allowed it to include VGA version very early, even before the retail release. A few games were like that but I did not know that Lucasarts did that as well.

Reply 55 of 343, by vasyl

User metadata
Rank Oldbie
Rank
Oldbie

Almost forgot: there is something really odd about the last three lines in that routine -- a bug?

Reply 56 of 343, by HunterZ

User metadata
Rank l33t++
Rank
l33t++

I agree with vasyl's take on the Indy3 thing.

Reply 57 of 343, by Darkfalz

User metadata
Rank Member
Rank
Member

Sounds good! My mum plays a MahJong game which only supports certain chipsets for SVGA (pre-VESA days), I think Tseng is one of them!

Reply 58 of 343, by vasyl

User metadata
Rank Oldbie
Rank
Oldbie

Is that Hong Kong Mahjong, by any chance? That one was pretty good. There was later Windows 9x version but the port was quite lame.
BTW, I've asked freddie from Lucasarts Museum (http://lucasarts.vintagegaming.org/) about that Indy3 Paradise version. He is almost positive that the only difference was that Paradise version was on 5.25" floppies.

Reply 59 of 343, by vasyl

User metadata
Rank Oldbie
Rank
Oldbie

Did not get much time lately to deal with this, had a grand total of about 40 minutes in last seven days. Virtual Pool has proven to be quite tricky. I've tried a few hacks and did not get far. I am pretty positive that it requires proper implementation of odd/even addressing which we don't have at the moment. Looks like it also does some kind of split screen which does not work either -- the implementation is there but it must be incomplete. Can anybody suggest good link to VGA programming documentation, more verbose than VGADOC? I looked through DOSEMU sources but its VGA implementation is less featured than the one in DOSBox.
I am planning to refresh my patch on SF and update it to complete Dawn Patrol support some time this week.