Olivetti GO481 video card

Discussion of development and patch submission.
Post Reply
User avatar
ruben_balea
Posts: 191
Joined: Mon 08 May, 2017 11:24 pm
Location: Spain

Olivetti GO481 video card

Post by ruben_balea »

This is a VGA compatible video card used on many Olivetti/AT&T computers.
It has a Paradidse PVGA1A chip and 256KB of memory. As far as I know PVGA1A was the first consumer oriented chip having higher modes than standard VGA, like 256 colors at 640x400 and 16 colors at 800x600 on all cards and 256 colors at 640x480 on cards with 512KB of memory. It was like the first SUPER VGA but at that time it was called VGA Plus...

Olivetti GO481 is made for 16 bit slots but can work on 8 bit ones removing jumpers PN1 and PN2. One enables 8 bit RAM and other 8 bit ROM.
In some cards (I've 2) those jumpers are not present and were replaced each one by 2 solder spots joined by a small trace.
Seems that you can cut this trace between spots to make 8 bit card and solder a a SMD jumper (zero ohm smd resistor) to make a 16 bit card again if it comes already modified.
:!: This card is getting expensive so I don't recommend to modify it, there are some Trident and Realtek cards with 8/16 bit autosense or with jumpers at lower prices.
I won't make the BIOS image available to download anywhere, for users with the real card it's easy to dump, but BIOS from other PVGA1A cards should work also, like VGA BIOS from Amstrad PC2086 and PC3086, won't be an Olivetti card but will be a PVGA1A if you like that chip or have some software requiring it.

:?: I noticed that emulated PVGA1A is incorrectly identified as WD90C20 or WD90C22 by most software...

Code: Select all

diff -r -u go481//ibm.h src//ibm.h
--- go481//ibm.h	2017-08-06 18:43:24 +0000
+++ src//ibm.h	2017-08-06 09:39:52 +0000
@@ -424,10 +424,10 @@
         ROM_IBMPS1_2121,
         ROM_AMI386DX_OPTI495,
         ROM_MR386DX_OPTI495,
-      	ROM_IBMPS2_M30_286,
-	      ROM_IBMPS2_M50,
-	      ROM_IBMPS2_M55SX,
-	      ROM_IBMPS2_M80,
+	ROM_IBMPS2_M30_286,
+	ROM_IBMPS2_M50,
+	ROM_IBMPS2_M55SX,
+	ROM_IBMPS2_M80,
                 	
         ROM_MAX
 };
@@ -442,29 +442,28 @@
         GFX_CGA = 0,
         GFX_MDA,
         GFX_HERCULES,
-        GFX_EGA,             /*Using IBM EGA BIOS*/
-        GFX_TVGA,            /*Using Trident TVGA8900D BIOS*/
-        GFX_ET4000,          /*Tseng ET4000*/
-        GFX_ET4000W32,       /*Tseng ET4000/W32p (Diamond Stealth 32)*/
-        GFX_BAHAMAS64,       /*S3 Vision864 (Paradise Bahamas 64)*/
-        GFX_N9_9FX,          /*S3 764/Trio64 (Number Nine 9FX)*/
-        GFX_VIRGE,           /*S3 Virge*/
-        GFX_TGUI9440,        /*Trident TGUI9440*/
-        GFX_VGA,             /*IBM VGA*/        
-        GFX_VGAEDGE16,       /*ATI VGA Edge-16 (18800-1)*/
-        GFX_VGACHARGER,      /*ATI VGA Charger (28800-5)*/
-        GFX_OTI067,          /*Oak OTI-067*/
-        GFX_MACH64GX,        /*ATI Graphics Pro Turbo (Mach64)*/
-        GFX_CL_GD5429,       /*Cirrus Logic CL-GD5429*/
-        GFX_VIRGEDX,         /*S3 Virge/DX*/
-        GFX_PHOENIX_TRIO32,  /*S3 732/Trio32 (Phoenix)*/
-        GFX_PHOENIX_TRIO64,  /*S3 764/Trio64 (Phoenix)*/
-       	GFX_INCOLOR,	       /* Hercules InColor */ 
-       	GFX_OLIVETTI_GO481,  /* Olivetti GO481 PVGA1A (16 bit card with jumpers to enable 8 bit slot compatibility) */
-	      GFX_COLORPLUS,	     /* Plantronics ColorPlus */
-	      GFX_WY700,	         /* Wyse 700 */
-	      GFX_GENIUS,	         /* MDSI Genius */
-        GFX_MACH64VT2,       /*ATI Mach64 VT2*/
+        GFX_EGA,        /*Using IBM EGA BIOS*/
+        GFX_TVGA,       /*Using Trident TVGA8900D BIOS*/
+        GFX_ET4000,     /*Tseng ET4000*/
+        GFX_ET4000W32,  /*Tseng ET4000/W32p (Diamond Stealth 32)*/
+        GFX_BAHAMAS64,  /*S3 Vision864 (Paradise Bahamas 64)*/
+        GFX_N9_9FX,     /*S3 764/Trio64 (Number Nine 9FX)*/
+        GFX_VIRGE,      /*S3 Virge*/
+        GFX_TGUI9440,   /*Trident TGUI9440*/
+        GFX_VGA,        /*IBM VGA*/        
+        GFX_VGAEDGE16,  /*ATI VGA Edge-16 (18800-1)*/
+        GFX_VGACHARGER, /*ATI VGA Charger (28800-5)*/
+        GFX_OTI067,     /*Oak OTI-067*/
+        GFX_MACH64GX,   /*ATI Graphics Pro Turbo (Mach64)*/
+        GFX_CL_GD5429,  /*Cirrus Logic CL-GD5429*/
+        GFX_VIRGEDX,    /*S3 Virge/DX*/
+        GFX_PHOENIX_TRIO32, /*S3 732/Trio32 (Phoenix)*/
+        GFX_PHOENIX_TRIO64, /*S3 764/Trio64 (Phoenix)*/
+       	GFX_INCOLOR,	/* Hercules InColor */ 
+	GFX_COLORPLUS,	/* Plantronics ColorPlus */
+	GFX_WY700,	/* Wyse 700 */
+	GFX_GENIUS,	/* MDSI Genius */
+        GFX_MACH64VT2,  /*ATI Mach64 VT2*/
         GFX_MAX
 };
 
diff -r -u go481//vid_paradise.c src//vid_paradise.c
--- go481//vid_paradise.c	2017-08-06 18:31:00 +0000
+++ src//vid_paradise.c	2017-08-06 09:39:52 +0000
@@ -1,6 +1,6 @@
 /*Paradise VGA emulation
 
-  PC2086, PC3086, GO481 use PVGA1A
+  PC2086, PC3086 use PVGA1A
   MegaPC uses W90C11A
   */
 #include <stdlib.h>
@@ -337,18 +337,6 @@
         return paradise;
 }
 
-static void *paradise_pvga1a_oli_go481_init()
-{
-        paradise_t *paradise = paradise_pvga1a_init();
-
-        if (paradise)
-        rom_init_interleaved(&paradise->bios_rom,
-                                     "oli_go481_lo.bin",
-                                     "oli_go481_hi.bin",
-                                     0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
-        return paradise;
-}
-
 static void *paradise_wd90c11_megapc_init()
 {
         paradise_t *paradise = paradise_wd90c11_init();
@@ -411,17 +399,6 @@
         paradise_close,
         NULL,
         paradise_speed_changed,
-        paradise_force_redraw,
-        paradise_add_status_info
-};
-device_t paradise_pvga1a_oli_go481_device =
-{
-        "Paradise PVGA1A (Olivetti GO481)",
-        0,
-        paradise_pvga1a_oli_go481_init,
-        paradise_close,
-        NULL,
-        paradise_speed_changed,
         paradise_force_redraw,
         paradise_add_status_info
 };
diff -r -u go481//vid_paradise.h src//vid_paradise.h
--- go481//vid_paradise.h	2017-08-06 18:29:47 +0000
+++ src//vid_paradise.h	2017-08-06 09:39:52 +0000
@@ -1,4 +1,3 @@
 extern device_t paradise_pvga1a_pc2086_device;
 extern device_t paradise_pvga1a_pc3086_device;
 extern device_t paradise_wd90c11_megapc_device;
-extern device_t paradise_pvga1a_oli_go481_device;
diff -r -u go481//video.c src//video.c
--- go481//video.c	2017-08-06 18:35:41 +0000
+++ src//video.c	2017-08-06 09:39:52 +0000
@@ -52,33 +52,32 @@
 
 static VIDEO_CARD video_cards[] =
 {
-        {"ATI Graphics Pro Turbo (Mach64 GX)",     "mach64gx",       &mach64gx_device,                  GFX_MACH64GX},
-        {"ATI Video Xpression (Mach64 VT2)",       "mach64vt2",      &mach64vt2_device,                 GFX_MACH64VT2},
-        {"ATI VGA Charger (ATI-28800)",            "ati28800",       &ati28800_device,                  GFX_VGACHARGER},
-        {"ATI VGA Edge-16 (ATI-18800)",            "ati18800",       &ati18800_device,                  GFX_VGAEDGE16},
-        {"CGA",                                    "cga",            &cga_device,                       GFX_CGA},
-        {"Cirrus Logic CL-GD5429",                 "cl_gd5429",      &gd5429_device,                    GFX_CL_GD5429},
-        {"Diamond Stealth 32 (Tseng ET4000/w32p)", "stealth32",      &et4000w32p_device,                GFX_ET4000W32},
-        {"Diamond Stealth 3D 2000 (S3 ViRGE)",     "stealth3d_2000", &s3_virge_device,                  GFX_VIRGE},
-        {"EGA",                                    "ega",            &ega_device,                       GFX_EGA},
-        {"Hercules",                               "hercules",       &hercules_device,                  GFX_HERCULES},
-        {"Hercules InColor",                       "incolor",        &incolor_device,                   GFX_INCOLOR},
-        {"MDA",                                    "mda",            &mda_device,                       GFX_MDA},
-        {"MDSI Genius",                            "genius",         &genius_device,                    GFX_GENIUS},
-        {"Number Nine 9FX (S3 Trio64)",            "n9_9fx",         &s3_9fx_device,                    GFX_N9_9FX},
-        {"OAK OTI-067",                            "oti067",         &oti067_device,                    GFX_OTI067},
-        {"Olivetti GO481 (Paradise PVGA1A)", "olivetti_go481", &paradise_pvga1a_oli_go481_device, GFX_OLIVETTI_GO481},
-        {"Paradise Bahamas 64 (S3 Vision864)",     "bahamas64",      &s3_bahamas64_device,              GFX_BAHAMAS64},
-        {"Phoenix S3 Trio32",                      "px_trio32",      &s3_phoenix_trio32_device,         GFX_PHOENIX_TRIO32},
-        {"Phoenix S3 Trio64",                      "px_trio64",      &s3_phoenix_trio64_device,         GFX_PHOENIX_TRIO64},
-        {"Plantronics ColorPlus",                  "plantronics",    &colorplus_device,                 GFX_COLORPLUS},
-        {"S3 ViRGE/DX",                            "virge375",       &s3_virge_375_device,              GFX_VIRGEDX},
-        {"Trident TVGA8900D",                      "tvga8900d",      &tvga8900d_device,                 GFX_TVGA},
-        {"Tseng ET4000AX",                         "et4000ax",       &et4000_device,                    GFX_ET4000},
-        {"Trident TGUI9440",                       "tgui9440",       &tgui9440_device,                  GFX_TGUI9440},
-        {"VGA",                                    "vga",            &vga_device,                       GFX_VGA},
-        {"Wyse 700",                               "wy700",          &wy700_device,                     GFX_WY700},
-        {"",                                       "",               NULL,                              0}
+        {"ATI Graphics Pro Turbo (Mach64 GX)",     "mach64gx",       &mach64gx_device,            GFX_MACH64GX},
+        {"ATI Video Xpression (Mach64 VT2)",       "mach64vt2",      &mach64vt2_device,           GFX_MACH64VT2},
+        {"ATI VGA Charger (ATI-28800)",            "ati28800",       &ati28800_device,            GFX_VGACHARGER},
+        {"ATI VGA Edge-16 (ATI-18800)",            "ati18800",       &ati18800_device,            GFX_VGAEDGE16},
+        {"CGA",                                    "cga",            &cga_device,                 GFX_CGA},
+        {"Cirrus Logic CL-GD5429",                 "cl_gd5429",      &gd5429_device,              GFX_CL_GD5429},
+        {"Diamond Stealth 32 (Tseng ET4000/w32p)", "stealth32",      &et4000w32p_device,          GFX_ET4000W32},
+        {"Diamond Stealth 3D 2000 (S3 ViRGE)",     "stealth3d_2000", &s3_virge_device,            GFX_VIRGE},
+        {"EGA",                                    "ega",            &ega_device,                 GFX_EGA},
+        {"Hercules",                               "hercules",       &hercules_device,            GFX_HERCULES},
+        {"Hercules InColor",                       "incolor",        &incolor_device,            GFX_INCOLOR},
+        {"MDA",                                    "mda",            &mda_device,                 GFX_MDA},
+        {"MDSI Genius",                            "genius",         &genius_device,              GFX_GENIUS},
+        {"Number Nine 9FX (S3 Trio64)",            "n9_9fx",         &s3_9fx_device,              GFX_N9_9FX},
+        {"OAK OTI-067",                            "oti067",         &oti067_device,              GFX_OTI067},
+        {"Paradise Bahamas 64 (S3 Vision864)",     "bahamas64",      &s3_bahamas64_device,        GFX_BAHAMAS64},
+        {"Phoenix S3 Trio32",                      "px_trio32",      &s3_phoenix_trio32_device,   GFX_PHOENIX_TRIO32},
+        {"Phoenix S3 Trio64",                      "px_trio64",      &s3_phoenix_trio64_device,   GFX_PHOENIX_TRIO64},
+        {"Plantronics ColorPlus",                  "plantronics",    &colorplus_device,           GFX_COLORPLUS},
+        {"S3 ViRGE/DX",                            "virge375",       &s3_virge_375_device,        GFX_VIRGEDX},
+        {"Trident TVGA8900D",                      "tvga8900d",      &tvga8900d_device,           GFX_TVGA},
+        {"Tseng ET4000AX",                         "et4000ax",       &et4000_device,              GFX_ET4000},
+        {"Trident TGUI9440",                       "tgui9440",       &tgui9440_device,            GFX_TGUI9440},
+        {"VGA",                                    "vga",            &vga_device,                 GFX_VGA},
+        {"Wyse 700",                               "wy700",          &wy700_device,               GFX_WY700},
+        {"",                                       "",               NULL,                        0}
 };
 
 int video_card_available(int card)

Attachments
2.jpg
2.jpg (182.2 KiB) Viewed 6371 times
Last edited by ruben_balea on Tue 31 Oct, 2017 4:14 pm, edited 1 time in total.
User avatar
SarahWalker
Site Admin
Posts: 2054
Joined: Thu 24 Apr, 2014 4:18 pm

Re: Olivetti GO481 video card

Post by SarahWalker »

Committed at rev 837.
ecksemmess
Posts: 183
Joined: Wed 18 Mar, 2015 5:27 am

Re: Olivetti GO481 video card

Post by ecksemmess »

The amount of memory is surely 256KB, not 256Kb (32KB), right? I know it's a minor detail, but I can see some potential for user confusion here, so it should probably be corrected. And for that matter, isn't it a bit inconsistent to be listing the memory amount right in the displayed name of the board, when we don't do that for any of the other boards and have no need for disambiguation?
User avatar
ruben_balea
Posts: 191
Joined: Mon 08 May, 2017 11:24 pm
Location: Spain

Re: Olivetti GO481 video card

Post by ruben_balea »

ecksemmess wrote:The amount of memory is surely 256KB, not 256Kb (32KB), right? I know it's a minor detail, but I can see some potential for user confusion here, so it should probably be corrected. And for that matter, isn't it a bit inconsistent to be listing the memory amount right in the displayed name of the board, when we don't do that for any of the other boards and have no need for disambiguation?
Post edited, should be correct now...

PVGA1A chip with 256 kB gives 16 colors @ 800x600, 256 colors @ 640x400 and all standard VGA modes plus CGA, MDA, Hercules, Olivetti/AT&T and EGA modes.
PVGA1A chip with 512 kB or 1 MB will give also 256 colors @ 640x480 but no more, 16 colors @ 1024x768 are supported only by WD90C00/WD90C11 chips.
Last edited by ruben_balea on Tue 31 Oct, 2017 4:19 pm, edited 1 time in total.
ecksemmess
Posts: 183
Joined: Wed 18 Mar, 2015 5:27 am

Re: Olivetti GO481 video card

Post by ecksemmess »

If the Olivetti GO481 only came in a 256K version, then it's not unreasonable to expect the user to know that or look it up. The fact that the PVGA1A itself supported 512K and 1M boards doesn't really seem relevant here. In any case, if we were to decide that it's worth making the memory size explicit, then we should be consistent and do that for all of the boards that don't have a "configure" option, of which there are many. You say "all other cards emulated have a fixed memory amount or have the option to select memory size"--I'm actually not sure that's true, but even if it is, it misses the point, because the Olivetti GO481 itself has a "fixed memory amount" of 256K! That the PVGA1A chip has no such limitation isn't really relevant. I do get your concern that users might wrongly assume that the memory limitations of the chipset are coextensive with the memory limitations of the board, but I'd chalk that up to user error. And, in any case, if it's worth taking preventative measures against that possibility, we should be consistent about it and list the memory amount for every board that doesn't have a "configure" button. Anyway, I see that Sarah has already corrected this, so it's rather moot at this point.

Oh, and just a minor quibble about the upper vs. lowercase 'k' for "kilo": you're right that, in standard SI notation, the 'k' should indeed be lowercase. However, the convention in engineering, computing, and IT has long been to use an uppercase 'K', despite that being a departure from strict SI. It's more important to follow the established conventions than to appeal to some abstract ideal of "correctness", I think.
User avatar
ruben_balea
Posts: 191
Joined: Mon 08 May, 2017 11:24 pm
Location: Spain

Re: Olivetti GO481 video card

Post by ruben_balea »

Yes, the definitive name "Olivetti GO481 (Paradise PVGA1A)" is clear enough and on the style of the other cards, after all it's true that the potential users should already know how the real card is, which drivers may need for each OS etc.
Post Reply