VOGONS


First post, by Chain-Q

User metadata
Rank Newbie
Rank
Newbie

Hi there.

I'm the author of the Amiga software Viaduct. This is an alternative application for Commodore PC "bridge" cards, that - unlike the old Commodore program PCWindow - was designed to work better with high-end expanded Amiga computers with graphics cards and fast CPU accelerators.

Recently, I learned about the Plantronics ColorPlus as a CGA extension, then read somewhere that Commodore PC clones supported it, but since there was so little amount of software back in the days, this was never advertised. I already noticed earlier that all PC Bridges have 32K of CGA memory, but after learning about the ColorPlus, I checked the bridge specification again, and sure enough, the otherwise very strict register mapping of these cards maps also I/O port 0x3dd to the Amiga side, which is the only extra register needed to support the ColorPlus modes on top of CGA. So I went ahead, and added support for both 320x200 16 color, and 640x200 4 color modes for the upcoming v1.6 version of Viaduct.

This is nice, but of course the 32K CGA RAM could be utilized for a 640x400 CGA mono mode, much like the AT&T 6300. Sadly, the bridge doesn't map the extra registers needed to provide AT&T 6300 compatibility to the Amiga side. However, I decided that I want this mode anyway, so I mapped one of the unused bits of the 0x3dd port to enabling this mode.

How it works: the software should switch to 640x200 mono mode as usual, then switch on bit 0 to 1 in register 0x3dd, while making sure the rest of the register is 0. I wrote a super-simple TP7 test app, and it works.

Mode switch code is more or less:

mov ah,0
mov al,6
int $10
mov al,1
mov dx,$3dd
out dx,al

The memory layout is the same as the AT&T 6300, 4 different line-blocks, each from $B8000, $BA000, $BC000 and $BE000 respectively.

Now, to the point of my post. Of course, I immediately had the idea to have a Windows driver (and maybe a GEM driver?) because this way it would be very easy to utilize the extra mode with relatively minimal effort and a large number of software. Even Windows is somewhat useful in 640x400 mono (or 720x348 Hercules), compared to 640x200 mono CGA, which is really only good as an interesting curiosity. So I found the Windows 3.1 DDK online, which I downloaded, then spent the last two days trying various combination of MASM and other tools to get the example CGA driver in it compiled, but I was unsuccessful. Additionally, 16bit x86 is not my strong point anyway, plus the example driver needs 386 mode, as far as I understand, while most of the PC bridges out there are 286 and XTs. So there are just too many unknowns in this equation for me at this point it seems.

So finally the question: is there anyone around here, who could assist me in getting this running? Or at least get me started somehow in the right direction? Ideally I'd like to have a driver that works both in real and 386 mode of Windows. Or whatever other modes are there as well. 😀 And then of course, a GEM driver would be a plus, but that could be round 2. We could bundle this/these driver/s to Viaduct then. Thanks a lot in advance to anyone who answers.

AMD K6-III+/400@550, 512MB, Diamond Stealth V550, Gravis Ultrasound MAX 1MB, Sound Blaster AWE64
C= Amiga 2000, Motorola 68060@50, 128MB, Cirrus Logic 5446A 4MB, ESS 1688 + Intel 80386sx@20 8MB
Member of the Free Pascal Compiler team, Twitter: @chainq

Reply 1 of 13, by mR_Slug

User metadata
Rank Member
Rank
Member

Nice to see someone writing a driver for these old OSes. I really can't help you much, but if you get no luck here maybe try vcfed.org. As the focus is older stuff.

The Retro Web | EISA .cfg Archive | Chip set Encyclopedia

Reply 2 of 13, by Jo22

User metadata
Rank l33t++
Rank
l33t++

That sounds really fascinating! 😎

Windows 3.0 had an AT&T driver included, too, I think. Maybe it can be patched.
Found a video: https://www.youtube.com/watch?v=yCmU5AXdxmc

As you said, 640x400 pels is good enough for Windows.
The VGA driver in Windows 2.03 uses it, too.
Other versions of the 2.x line may use other, weird resolutions (for applications expecting EGA view port)..

I've also made a little test program for 640x400, btw.
It uses QB45 and its SCREEN modes.
Olivetti/Logabax/AT&T/Toshiba 640x400 hi-res graphics mode

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 3 of 13, by Chain-Q

User metadata
Rank Newbie
Rank
Newbie
mR_Slug wrote on 2022-06-29, 21:32:

I really can't help you much, but if you get no luck here maybe try vcfed.org. As the focus is older stuff.

Yes, I while Googling for some info, I noticed relevant posts over on vcfed.org, but I don't have an account over here, and I had one here already. Also I've seen the Plantronics driver for the Sierra games discussed here, so I guessed I'd give it a go. But good hint, thanks.

AMD K6-III+/400@550, 512MB, Diamond Stealth V550, Gravis Ultrasound MAX 1MB, Sound Blaster AWE64
C= Amiga 2000, Motorola 68060@50, 128MB, Cirrus Logic 5446A 4MB, ESS 1688 + Intel 80386sx@20 8MB
Member of the Free Pascal Compiler team, Twitter: @chainq

Reply 4 of 13, by Chain-Q

User metadata
Rank Newbie
Rank
Newbie
Jo22 wrote on 2022-06-29, 21:36:

Windows 3.0 had an AT&T driver included, too, I think. Maybe it can be patched.

Yes, in fact this driver is also bundled to Windows 3.1 (at least to the version I have here), and it misidentifies the PC bridge's CGA controller as an "Olivetti M24", because it has 32K RAM, then all you get while trying to boot is a black screen. Probably because the required BIOS support is missing(?). Anyway, one has to inject the older Win 3.0 CGA driver to get anything working. 😀 (And fun fact, I can even see this detection code trying for 32K RAM in the CGA driver bundled to the W3.1 DDK! So it's quite clear that is what's happening.)

I've also made a little test program for 640x400, btw.
It uses QB45 and its SCREEN modes.
Olivetti/Logabax/AT&T/Toshiba 640x400 hi-res graphics mode

Yes, thanks, I've actually found this post earlier while searching for info about 640x400 mono. 😀

AMD K6-III+/400@550, 512MB, Diamond Stealth V550, Gravis Ultrasound MAX 1MB, Sound Blaster AWE64
C= Amiga 2000, Motorola 68060@50, 128MB, Cirrus Logic 5446A 4MB, ESS 1688 + Intel 80386sx@20 8MB
Member of the Free Pascal Compiler team, Twitter: @chainq

Reply 6 of 13, by Chain-Q

User metadata
Rank Newbie
Rank
Newbie
Plasma wrote on 2022-06-30, 09:23:

You can probably just write a TSR that hooks int 10h and handles ax=40h/48h to set the mode. Then use the included Windows 3.1 Olivetti/AT&T driver.

Yes, that was my initial idea, but it seems the Windows driver - at least in 386 mode - tracks register states and writes, so it can restore various modes that might have been set in DOS full screen sessions and so on, plus reprograms the card on its own (I couldn't find any BIOS calls, really, at least not for a mode switch). So tracking for AT&T 6300 registers has to be removed, and support for 0x3dd has to be added, etc, at least for full support. At least when looking at the driver source in the Win3.1 DDK, it didn't looked _that_ trivial like faking a BIOS call and calling it a day. But I might be wrong, neither my Win16-fu, nor my 16bit x86 asm-fu is that strong, hence I asked for input from others.

I might still do the TSR for other software though, that supports this mode from DOS (like QBasic).

AMD K6-III+/400@550, 512MB, Diamond Stealth V550, Gravis Ultrasound MAX 1MB, Sound Blaster AWE64
C= Amiga 2000, Motorola 68060@50, 128MB, Cirrus Logic 5446A 4MB, ESS 1688 + Intel 80386sx@20 8MB
Member of the Free Pascal Compiler team, Twitter: @chainq

Reply 7 of 13, by ViTi95

User metadata
Rank Member
Rank
Member

Don't know if this may help, I've found some information on how the AT&T 6300 mode 40h is set. Direct quote from other post (WD90C11 and AT&T Model 6300 video mode):

I've found something very interesting for this topic. The ROM listing for the AT&T 6300 Plus is available online (http://bitsavers.org/pdf/att/6300/ATT_Persona … ue_1_-_1986.pdf), so it's possible to understand how the mode 40h and 48h are set.

Just go to the page 202.

I'll try to create a test utility and see if this really works on more video cards.

https://www.youtube.com/@viti95

Reply 8 of 13, by Chain-Q

User metadata
Rank Newbie
Rank
Newbie
Jo22 wrote on 2022-06-29, 21:36:

I've also made a little test program for 640x400, btw.
It uses QB45 and its SCREEN modes.
Olivetti/Logabax/AT&T/Toshiba 640x400 hi-res graphics mode

Just a quick update here, based on Plasma's idea, and though I'm 100% sure it won't get me Windows working, I started working on a TSR, that would patch the BIOS to switch into "my" 640x400 mode when mode 40h/48h is requested. It already works with my test app, it also works with Turbo Pascal 7's ATT.BGI. But both QBASIC and QuickBASIC 4.5 errors out at line SCREEN 4, saying the mode is not available. I wonder if it detects the AT&T controller somehow on the register level (and I have no chance of supporting that, due to the lack of required register mappings on the hardware level), or I just need to add more BIOS calls to have the support working (for example get mode? what if it verifies after switching into the mode if it was actually successful?).

BTW, the BIOS TSR project quickly seems to snowballed into something much larger, than I anticipated. Apart from the "just set the extra bit bit and be done with it", one needs to have support for various other calls, like clearing the screen, probably the aforementioned get mode, but also text rendering support in 640x400... both with 8x8 and 8x16 characters, actually... And more. I'm not even aiming for full support, or I'll end up re-implementing half the CGA video BIOS... Which is not that complicated, but not what I had in mind as my next project. 😀 Also it's my first DOS TSR I've ever written, also only my 2nd or 3rd pure asm code for DOS ever (and everything before was 386+), so everything is new and a learning curve... Oh well. 😀

Last edited by Chain-Q on 2022-07-02, 15:31. Edited 1 time in total.

AMD K6-III+/400@550, 512MB, Diamond Stealth V550, Gravis Ultrasound MAX 1MB, Sound Blaster AWE64
C= Amiga 2000, Motorola 68060@50, 128MB, Cirrus Logic 5446A 4MB, ESS 1688 + Intel 80386sx@20 8MB
Member of the Free Pascal Compiler team, Twitter: @chainq

Reply 9 of 13, by Chain-Q

User metadata
Rank Newbie
Rank
Newbie
ViTi95 wrote on 2022-06-30, 21:15:

Don't know if this may help, I've found some information on how the AT&T 6300 mode 40h is set.

Thanks for this, it's always good to have more references & background info, but this is not that helpful for this specific problem, as I lack the AT&T 6300 compatible hardware (register mappings are missing from the PC to the Amiga inside the hardware, so I can't just check and handle the required registers in my video emulation code - that runs on the Amiga -, even if an AT&T compatible BIOS or other software pokes them). So I just need to add a BIOS mode somehow which then uses a different method in the background to switch to a 640x400 mode with the same video ram layout.

So basically one can then reuse all rendering code for the AT&T for this mode (as it already works with my TSR + Turbo Pascal 7 ATT.BGI), but the mode setting code must be totally different, sadly. (Which is also why the Windows/GEM/etc drivers need to be modified.)

AMD K6-III+/400@550, 512MB, Diamond Stealth V550, Gravis Ultrasound MAX 1MB, Sound Blaster AWE64
C= Amiga 2000, Motorola 68060@50, 128MB, Cirrus Logic 5446A 4MB, ESS 1688 + Intel 80386sx@20 8MB
Member of the Free Pascal Compiler team, Twitter: @chainq

Reply 10 of 13, by Plasma

User metadata
Rank Member
Rank
Member
Chain-Q wrote on 2022-07-02, 15:17:
Jo22 wrote on 2022-06-29, 21:36:

I've also made a little test program for 640x400, btw.
It uses QB45 and its SCREEN modes.
Olivetti/Logabax/AT&T/Toshiba 640x400 hi-res graphics mode

Just a quick update here, based on Plasma's idea, and though I'm 100% sure it won't get me Windows working, I started working on a TSR, that would patch the BIOS to switch into "my" 640x400 mode when mode 40h/48h is requested. It already works with my test app, it also works with Turbo Pascal 7's ATT.BGI. But both QBASIC and QuickBASIC 4.5 errors out at line SCREEN 4, saying the mode is not available. I wonder if it detects the AT&T controller somehow on the register level (and I have no chance of supporting that, due to the lack of required register mappings on the hardware level), or I just need to add more BIOS calls to have the support working (for example get mode? what if it verifies after switching into the mode if it was actually successful?).

BTW, the BIOS TSR project quickly seems to snowballed into something much larger, than I anticipated. Apart from the "just set the extra bit bit and be done with it", one needs to have support for various other calls, like clearing the screen, probably the aforementioned get mode, but also text rendering support in 640x400... both with 8x8 and 8x16 characters, actually... And more. I'm not even aiming for full support, or I'll end up re-implementing half the CGA video BIOS... Which is not that complicated, but not what I had in mind as my next project. 😀 Also it's my first DOS TSR I've ever written, also only my 2nd or 3rd pure asm code for DOS ever (and everything before was 386+), so everything is new and a learning curve... Oh well. 😀

QB does a check for strings in the BIOS to detect Olivetti. If you want to patch it, you can search for 4F 4C 75 58 and replace with 4F 4C EB 52.

Reply 11 of 13, by Chain-Q

User metadata
Rank Newbie
Rank
Newbie

Plasma: Thanks. Obviously Microsoft had to do it the least elegant way. Yuck. 🙁 Too bad.

AMD K6-III+/400@550, 512MB, Diamond Stealth V550, Gravis Ultrasound MAX 1MB, Sound Blaster AWE64
C= Amiga 2000, Motorola 68060@50, 128MB, Cirrus Logic 5446A 4MB, ESS 1688 + Intel 80386sx@20 8MB
Member of the Free Pascal Compiler team, Twitter: @chainq

Reply 13 of 13, by yevrowl

User metadata
Rank Newbie
Rank
Newbie
Chain-Q wrote on 2022-06-29, 20:03:

Recently, I learned about the Plantronics ColorPlus as a CGA extension, then read somewhere that Commodore PC clones supported it, but since there was so little amount of software back in the days, this was never advertised. I already noticed earlier that all PC Bridges have 32K of CGA memory, but after learning about the ColorPlus, I checked the bridge specification again, and sure enough, the otherwise very strict register mapping of these cards maps also I/O port 0x3dd to the Amiga side, which is the only extra register needed to support the ColorPlus modes on top of CGA. So I went ahead, and added support for both 320x200 16 color, and 640x200 4 color modes for the upcoming v1.6 version of Viaduct.

Thanks, very interesting. Just looking for an opportunity to add the capabilities of the Plantronics Colorplus (320 × 200 × 16) graphics adapter to QuickBasic.

÷)