VOGONS


First post, by Nemo1985

User metadata
Rank Oldbie
Rank
Oldbie

Hello, on my everywhere used configuration (config.sys and autoexec.bat), I noticed that pc player benchmark when ran at 640x480 quits with a error in german saying: "Fehler beim initialisieren des Linearen Framebuffers".

The program works fine if I do not use emm386.

That's my config.sys file:

[COMMON]
SWITCHES=/E:288 /F
DOS=HIGH,UMB,AUTO
BUFFERSHIGH=30,0
FILESHIGH=60
FCBSHIGH=4,0
STACKSHIGH=9,256
LASTDRIVEHIGH=Z
COUNTRY=039,850,C:\WINDOWS\COMMAND\COUNTRY.SYS

[EM]
DEVICE=C:\WINDOWS\XMGR.SYS /B
DEVICE=C:\WINDOWS\EMM386.EXE NOEMS NOVCPI I=B000-B7FF
DEVICEHIGH=C:\WINDOWS\XMGR.SYS
DEVICEHIGH=C:\WINDOWS\COMMAND\DISPLAY.SYS CON=(EGA,,1)

[CM]
DEVICE=C:\WINDOWS\XMGR.SYS
DEVICEHIGH=C:\WINDOWS\COMMAND\DISPLAY.SYS CON=(EGA,,1)

EM loads expanded memory, while CM loads conventional memory only. The autoexec.bat is the very same.
I tried to:
1) load xmgr without the /b switch
2) remove the switches from the emm386
3) disable some bios things like video and system cacheable, some settings about the pci bus.
4) JEMM386
5) himem.sys instead of xmgr

Nothing of that helped.

Any guess please?

Reply 1 of 10, by Anonymous Coward

User metadata
Rank l33t
Rank
l33t

In what part of memory is your linear frame buffer? Is it possible to move it to a higher location?

"Will the highways on the internets become more few?" -Gee Dubya
V'Ger XT|Upgraded AT|Ultimate 386|Super VL/EISA 486|SMP VL/EISA Pentium

Reply 2 of 10, by Nemo1985

User metadata
Rank Oldbie
Rank
Oldbie
Anonymous Coward wrote on 2022-07-26, 01:10:

In what part of memory is your linear frame buffer? Is it possible to move it to a higher location?

That's a good question, I have no idea, is there any utility I can use to check?
Maybe it's just a problem of that benchmark, an utility to check the linear frame buffer could be useful!

Reply 4 of 10, by Nemo1985

User metadata
Rank Oldbie
Rank
Oldbie
badmojo wrote on 2022-07-26, 02:10:

This might be helpful for tracking down your LFB: Re: Dude, where's my frame buffer?

Thank you for the tip, apparently the linear frame buffer is there with and without emm386 loaded.
Still pcpplayer benchmark seem unable to use it with emm386

Reply 5 of 10, by 1541

User metadata
Rank Member
Rank
Member

Which version of the PCP benchmark are you using?
Please find attached v1.04 which presumably fixed some LFB issue.
You can also try the "/NOLINEAR" switch for testing.

Attachments

  • Filename
    PCPB104.ZIP
    File size
    310.95 KiB
    Downloads
    35 downloads
    File comment
    PC Player benchmark 1.04
    File license
    Fair use/fair dealing exception

💾 Windows 9x resources (drivers, tools, NUSB,...) 💾

Reply 6 of 10, by Nemo1985

User metadata
Rank Oldbie
Rank
Oldbie
1541 wrote on 2022-07-26, 12:49:

Which version of the PCP benchmark are you using?
Please find attached v1.04 which presumably fixed some LFB issue.
You can also try the "/NOLINEAR" switch for testing.

Thank you.
I was using the version 1.00, that being said, here are my findings:

Conventional memory gf2mx440:
dos4gw: black screen\crash
dos32a: works fine

Emm386 gf2mx440:
dos4gw: black screen\crash
dos32a: linear frame buffer error, works fine without lbf.

Conventional memory ET6000:
dos4gw: works fine
dos32a: works fine

Emm386 ET6000:
dos4gw: works fine
dos32a: linear frame buffer error, works fine without lbf.

With WDOSX dos extender the benchmark runs fine with lfb and both videocard but when I quit I get a memory allocation error and then command.com file hangs the system.

With /nolinear switch, everything works fine but the performance are obviously lower. Also with dos32a I got consistently 0,1fps more at 640 with lfb.

Sadly it seems there isn't a jack of all trades.

I suppose that the dos memory extender plays a role in that, but it's not my stuff... anyone with more knowledge would be able to fix the things for good?

Reply 7 of 10, by mkarcher

User metadata
Rank l33t
Rank
l33t

Well, it happened that I looked into DOS32A architecture recently. If EMM386 is loaded, DOS32A runs with paging enabled, but without EMM386, DOS32A uses a direct mapping between the 4GB virtual address space of the 32-bit application and physical addresses. If you run with paging enabled, there is a table the records the mapping from application space addresses to physical bus addresses. DOS32A by default only reserves 8KB of RAM for page tables relating to the LFB, which means it can not manage LFBs of a bigger size than 8MB. Likely both of your video cards report a bigger address range to be mapped (even if the ET6000 probably doesn't have more than 8MB).

You can reconfigure DOS32A: Near the beginning of the EXE file, there is the magic signature "ID32" followed by the hex bytes 3F 40 02. The 02 is the number of 4K blocks to reserve for use as page table space for LFB mappings. Try patching this number to something like 10.

Reply 8 of 10, by Nemo1985

User metadata
Rank Oldbie
Rank
Oldbie
mkarcher wrote on 2022-07-26, 17:27:

Well, it happened that I looked into DOS32A architecture recently. If EMM386 is loaded, DOS32A runs with paging enabled, but without EMM386, DOS32A uses a direct mapping between the 4GB virtual address space of the 32-bit application and physical addresses. If you run with paging enabled, there is a table the records the mapping from application space addresses to physical bus addresses. DOS32A by default only reserves 8KB of RAM for page tables relating to the LFB, which means it can not manage LFBs of a bigger size than 8MB. Likely both of your video cards report a bigger address range to be mapped (even if the ET6000 probably doesn't have more than 8MB).

You can reconfigure DOS32A: Near the beginning of the EXE file, there is the magic signature "ID32" followed by the hex bytes 3F 40 02. The 02 is the number of 4K blocks to reserve for use as page table space for LFB mappings. Try patching this number to something like 10.

Thanks it works like a charme now!

Edit: I did some testing, even with 04 the program runs fine (that's with the geforce 2 mx400). Do you advice to keep an higher value like 10?

Reply 9 of 10, by mkarcher

User metadata
Rank l33t
Rank
l33t
Nemo1985 wrote on 2022-07-26, 17:42:
mkarcher wrote on 2022-07-26, 17:27:

Well, it happened that I looked into DOS32A architecture recently. If EMM386 is loaded, DOS32A runs with paging enabled, but without EMM386, DOS32A uses a direct mapping between the 4GB virtual address space of the 32-bit application and physical addresses. If you run with paging enabled, there is a table the records the mapping from application space addresses to physical bus addresses. DOS32A by default only reserves 8KB of RAM for page tables relating to the LFB, which means it can not manage LFBs of a bigger size than 8MB. Likely both of your video cards report a bigger address range to be mapped (even if the ET6000 probably doesn't have more than 8MB).

You can reconfigure DOS32A: Near the beginning of the EXE file, there is the magic signature "ID32" followed by the hex bytes 3F 40 02. The 02 is the number of 4K blocks to reserve for use as page table space for LFB mappings. Try patching this number to something like 10.

Thanks it works like a charme now!

Edit: I did some testing, even with 04 the program runs fine (that's with the geforce 2 mx400). Do you advice to keep an higher value like 10?

There is no point in using a higher value than required. 10 hex uses 64KB for LFB page tables, 04 uses just 16KB for LFB page tables. So keeping it at 10 wastes 48KB of RAM for no gain whatsoever. I suggested a high value because especially with the GeForce I was afraid that the LFB window would be big enough to require such a high value.

Reply 10 of 10, by Nemo1985

User metadata
Rank Oldbie
Rank
Oldbie
mkarcher wrote on 2022-07-26, 19:44:

There is no point in using a higher value than required. 10 hex uses 64KB for LFB page tables, 04 uses just 16KB for LFB page tables. So keeping it at 10 wastes 48KB of RAM for no gain whatsoever. I suggested a high value because especially with the GeForce I was afraid that the LFB window would be big enough to require such a high value.

Thanks for the precious clarification, I will keep 04, if I will have any issue (maybe with video card with more memory?) I will increase the value.