sarah-walker-pcem / pcem

PCem
http://pcem-emulator.co.uk
GNU General Public License v2.0
1.47k stars 204 forks source link

ET4000AX (kasan16) hang in win95 in 16/24 bit modes #207

Open Randrianasulu opened 1 year ago

Randrianasulu commented 1 year ago

EDIT: oh, it was gfxcard = kasan16 that hang, with gfxcard = et4000ax 16-bit modes works, 24-bit mode show weird colors but no hang

Describe the bug I installed original english version win95 from DMF floppy disks.

To Reproduce Install windows () from floppies 3½ Floppy Windows 95 (Retail Full) (3.5-DMF) RTM (Retail Full) English

Configure PCem (compiled on Linux 32-bit x68 from 'dev' branch, commit 7a49e96c8077c457b591923e884a70b440dfd3fd )

  1. Set devices like in attached cfg pentium.txt

3.Run floppy install :}

  1. After all reboots try to set ET4000 device to 16 or 32 bit mode (800x600 - 640x480 max)

Expected behavior You see image, or at least something like win95 desktop

Screenshots pcem_et4000ax_hicolor_hang

Emulator configuration see attached

Host machine

Additional context I can provide link to compressed vhd (~22mb). Current 86Box git (1484a70ebb6d272511c7a160a3d951490fcb7d65) behaves OK - no hang, desktop image is artefact-free.

ruben-balea commented 1 year ago

You have selected a Kasan Hangulmadang-16 ET4000AX video card, do you really need a Korean VGA or did you choose it by mistake? Because PCem emulates three versions of the ET4000AX, a Trigem and a Kasan Hangulmadang-16, both with Korean support and a regular Tseng ET4000AX, I'm not sure if all three work with the same drivers.

And there is also an ET4000/W32P which offers hardware acceleration for the Windows GUI, maybe Windows installed the drivers for this one.

Randrianasulu commented 1 year ago

I think et4000w (with acceleration) should show up differently in win95's Device manager? But yeah, looking at my own config I noticed I set wrong VGA :} still some bug exist in PCem even for plain et400ax.

For 86Box it was [Video] gfxcard = et4000ax

Randrianasulu commented 1 year ago

pcem_et4000ax_truecolor_bug

24 bit with 640x480 looks like this (I think I already saw some bug here looking like this)

Randrianasulu commented 1 year ago

86Box also hang with at least 1MB kasan16 card in 24 bit mode.

Randrianasulu commented 1 year ago

may be related https://www.vogons.org/viewtopic.php?f=9&t=79318

Windows 95 still gives the 'option' for 24-bit color depth. Although it won't be able to set it properly, causing nasty display issues(displaying the wrong information because it's rendering 24-bit in VRAM and the DAC not being in an existing 24-bit color mode(15-bit with 2 clocks/color to be exact, due to setting the register to E0h).

so, may be this issue and few others actually due to wrongly-implemented DAC parts?

ruben-balea commented 1 year ago

Yes, it seems it can be expected to happen, it's pobably due to using an incorrect BIOS version...

According to here:

INT 10 - VIDEO - Tseng ET-4000 BIOS - GET DAC TYPE
AX = 10F1h
Return: AX = 0010h if successful, errorcode if not
BL = type of digital/analog converter
00h normal VGA DAC
01h Sierra SC11481/6/8 HiColor DAC

(Diamond SpeedStar 24:)
02h New SS24 DAC (16M colors) (actually)

(Tseng generic BIOS rev 8.00 or later:)
02h Sierra Mark2 (15-bit) or Mark3 (15/16-bit) DAC
03h ATT20c490/1/2 15/16/24 bit HiColor DAC
04h AcuMos ADAC1 (15/16/24 bit)
05h Sierra SC15025/26 (15/16/24 bit DAC)
06h Cirrus Internal 15/16/24 bit DAC (from CL-GD54xx series).
07h Diamond SS2410. (15/24 bit).
08h Music MU9c4910 (15/16/24 bit DAC).
09h Unknown Type 9 ??

and here:

case 1 << 15:
    /* All HiColor dacs handle 15 bit */
    if ((et4000_dac & 1) == 0)
        return 0;
    break;
    case 1 << 16:
    /* Unfortunately, we can't tell the difference between a Sierra Mark 2 */
    /* and a Mark 3, and the mark 2 is only 15 bit. If this gives you trouble */
    /* change it to (8|16) rather than (2|8|16) */
    /* Currently allow Sierra Mark2/3, AT&T, STG-170x and AcuMos */
    if ((et4000_dac & (2 | 8 | 16 | 32 | 64)) == 0)
        return 0;
    break;
    case 1 << 24:
    /* Don't know how to set dac command register for Diamond SS2410 Dac */
    /* Only allow AT&T, STG-170x and AcuMos */
    if ((et4000_dac & (8 | 16 | 32 | 64)) == 0)
        return 0;
    break;
    }

ET4000 cards with different DACs and different BIOSes can return conflicting info about the actual DAC they have: 02h can be a 24 bit SS24, a 15 bit Sierra Mark2 or a 15/16 bit Sierra Mark3

And also: https://www.vogons.org/viewtopic.php?p=911774#p911774

By the way normal VGA DAC is 8 bit = max 256 colors and Sierra SC11481/6/8 HiColor is 15 bit = max 32768 colors

BIOS V4.23X (03/01/91) was from a Diamond SpeedStar 24 (ET4000AX)

Diamond cards have strange contents on their BIOS chips, see here

widescreen!

Randrianasulu commented 1 year ago

I looked into my et4000.bin with mcview :-) it contain at very beginning those lines:

04/15/92 V8.06X.. Date : 04/15/92..

edit: et4000_kasan.bin says: 06/13/90 V8.02X.. KASAN ELECTRONICS VGA BIOS Ver 1.0a 05/01/91

ruben-balea commented 1 year ago

Acknowledgment I didn't fix this problem myself, I just found out that someone known as Tenshi had already fixed it years ago for 86box, I just looked it up on Google and it seems that it was another nickname for Miran Grča aka OBattler, the developer of 86box.

eddmanx commented 1 year ago

pcem_et4000ax_truecolor_bug

24 bit with 640x480 looks like this (I think I already saw some bug here looking like this)

It looks similar to this: #191.

However, that doesn't happen on all mainboards. For example, Shuttle HOT 557 is fine.

ruben-balea commented 1 year ago

Interesting, I didn't know that, the Ati Graphics Pro turbo on the P55T2P4 shows a black cursor even in modes that seem fine. At least with Windows 95