VOGONS


First post, by zerker

User metadata
Rank Member
Rank
Member

Hello folks. So my "new" AWE64 value arrived today, and I spent some time getting it set up. I'm running into two problems now:
1) I don't have any upper memory at all
2) I can't get FM synth to work in DOS

Here are the bare-bones config files I'm testing with right now:

Autoexec.bat

@ECHO OFF
SET TMP=C:\WINDOWS\TEMP
SET TEMP=C:\WINDOWS\TEMP
SET PROMPT=$p$g
SET winbootdir=C:\WINDOWS
SET PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\DosApp\Infozip
SET CTCM=C:\WINDOWS
SET SOUND=C:\CREATIVE
SET MIDI=SYNTH:1 MAP:E MODE:0
SET BLASTER=A220 I5 D1 H5 P330 E620 T6
CTCM

Config.sys

FILES=40
BUFFERS=10
DEVICE=C:\WINDOWS\HIMEM.SYS /VERBOSE /TESTMEM:OFF
REM DEVICEHIGH=C:\Windows\emm386.exe auto
DOS=HIGH,UMB

For the first problem, I've dug around in the BIOS a bit, changing some options to create memory holes, reserve memory, or enable/disable shadow copies without much success. If anyone has any suggestions please feel free. Otherwise I'll upload a bunch of BIOS photos later tonight.

For the second problem, I downloaded this AWE64Value CD image from the Vogons drivers library and installed the "Windows 95" drivers, although I am running Windows 98 first edition. Either way, the card works perfectly in Windows. All DOS games run within Windows play Midi, FM Synth and digital sounds properly.

If I use the Windows "exit to MSDOS" option, MIDI still works, but FM synth stops working. Digital sounds keep working fine too.

If I create a custom shortcut for command.com and tell Windows "use this configuration", and use the config files at the top of this post, I get digital sounds... and that's it. Neither Midi nor FM synth work in this configuration.

Thoughs?

Reply 1 of 16, by gdjacobs

User metadata
Rank l33t++
Rank
l33t++

You need something like EMM386 or UMBPCI to free upper memory.

As far as AWE64 FM:
Correct setup of Soundblaster AWE64 Gold

All hail the Great Capacitor Brand Finder

Reply 2 of 16, by alexanrs

User metadata
Rank l33t
Rank
l33t

For the first problem change

REM DEVICEHIGH=C:\Windows\emm386.exe auto

to

DEVICE=C:\Windows\emm386.exe RAM I=B000-B7FF

Reply 3 of 16, by zerker

User metadata
Rank Member
Rank
Member

Thanks guys.

I was under the (apparently mistaken) impression that himem.sys was supposed to create the upper memory, which is why I commented out emm386.exe when testing. Since my bios allows me to reserve memory, but only at the C0000 memory space, I changed the emm386 call accordingly.

But now doing both of those things is causing games to freeze up on start. Time to isolate what's going on...

After commenting out emm386 again, that resolves the stability issue. I'll just need to tweak how much I'm attempting to allocate and where it goes until things work better again... which may indeed involve putting it exactly where suggested above. The aweutil thing fixed the sound issue at least. Either way, I know where to start and I'll probably experiment with the upper memory tomorrow.

Last edited by zerker on 2016-02-16, 01:48. Edited 2 times in total.

Reply 4 of 16, by alexanrs

User metadata
Rank l33t
Rank
l33t

There is no need to reserve memory at the BIOS for this. In fact you better not do it - the C000 segment is where the VGA BIOS is anyway. Just use the line exactly as I typed and you should be fine. If you use anything that requires monochromatic modes, though, remove the "I=B000-B7FFF", because that is the memory range monochromatic modes use.

Reply 5 of 16, by zerker

User metadata
Rank Member
Rank
Member

Thanks. I will try that. I also edited while you replied, so let me move this here instead :

The msdosdrv.txt file mentions this locates both the upper memory blocks AND the paging information. Am I using up too much room for all the memory pages that I just don't have room for upper memory in the default location? I have 192 MB of ram, which is a bit more than most DOS stuff expects. Should I also try limiting the amount of extended memory using one of the config options so I have fewer pages?

Reply 6 of 16, by alexanrs

User metadata
Rank l33t
Rank
l33t

EMM386 is limited to providing 32MB of expanded memory (EMS), using a 64KB page frame. I can usually get over 90KB of upper memory with the page frame active, so this should not be an issue.

Reply 7 of 16, by zerker

User metadata
Rank Member
Rank
Member

Alright, I've got it all sorted out. I turned off the reserve option and am just using the basic "RAM" command-line option. This gets me some (~26 KB) upper memory, which is enough for now. If I find something I'm pressed for, I will also use the monochromatic video region.

I also noticed some games (cough, Doom) re-mute the FM synth, so I need to re-run AWEUTIL /S to get it back if I'm switching games. Not a big deal overall though.

Reply 8 of 16, by alexanrs

User metadata
Rank l33t
Rank
l33t

That's.... awfully little, even without the monochromatic region. I'd take a look at what MSD reports and see how your upper memory area looks like. You could also try the "HIGHSCAN" parameter in the EMM386 line to make it scan a bit more aggressively if you ever need more UMBs (it won't necessarily find more, though).

For those games you could always create batch files that start them and then run AWEUTIlL afterwards to do this automatically for you.

Reply 9 of 16, by zerker

User metadata
Rank Member
Rank
Member

The AWEUTIL thing isn't a big deal. It's probably not worth the effort making up the .BAT files. I'll just add it to the PATH so I can run it easily and I should be fine.

As for the memory thing, HIGHSCAN didn't make any difference, so I tracked down MSD on my Windows CD and created a report. Here's the memory section

     Legend:  Available "  "  RAM "##"  ROM "RR"  Possibly Available ".."
EMS Page Frame "PP" Used UMBs "UU" Free UMBs "FF"
1024K FC00 RRRRRRRRRRRRRRRR FFFF Conventional Memory
F800 RRRRRRRRRRRRRRRR FBFF Total: 640K
F400 RRRRRRRRRRRRRRRR F7FF Available: 564K
960K F000 RRRRRRRRRRRRRRRR F3FF 578256 bytes
EC00 ................ EFFF
E800 ................ EBFF Extended Memory
E400 ................ E7FF Total: 65535K
896K E000 ................ E3FF
DC00 PPPPPPPPPPPPPPPP DFFF MS-DOS Upper Memory Blocks
D800 PPPPPPPPPPPPPPPP DBFF Total UMBs: 26K
D400 PPPPPPPPPPPPPPPP D7FF Total Free UMBs: 1K
832K D000 PPPPPPPPPPPPPPPP D3FF Largest Free Block: 1K
CC00 UUUUUUUUUUUUUUFF CFFF
C800 #####UUUUUUUUUUU CBFF Expanded Memory (EMS)
C400 RRRRRRRRRRRRRRRR C7FF LIM Version: 4.00
768K C000 RRRRRRRRRRRRRRRR C3FF Page Frame Address: D000H
BC00 ################ BFFF Total: 33152K
B800 ################ BBFF Available: 32752K
B400 B7FF
704K B000 B3FF XMS Information
AC00 AFFF XMS Version: 3.00
A800 ABFF Driver Version: 3.5f
A400 A7FF A20 Address Line: Enabled
640K A000 A3FF High Memory Area: In use
Available: 65535K
Largest Free Block: 65535K
Available SXMS: 194864K
Largest Free SXMS: 194864K

VCPI Information
VCPI Detected: Yes
Version: 1.00
Available Memory: 32752K

I'm guessing it is basically telling me I might be able to use the E000 to EFFF region. It also says A000 through B7FF is free, but I read that this region is used for video memory, so this doesn't seem very safe to me 😀. I suspect I could also get more upper memory if I reduce my EMS region so some of the locations between D000 and DFFF frees up. I'll try that last option tomorrow and see if that makes a difference. Most memory-intensive DOS games are protected mode anyhow, so I don't see any value in having a large amount of EMS memory.

I also tried experimenting with the memory browser feature and wasn't able to get any more information there.

Reply 10 of 16, by alexanrs

User metadata
Rank l33t
Rank
l33t

Do you have any addon boards (e.g. SCSI controllers, non-ISA IDE controllers, NIC with a bootable ROM) that might be using the E000 range? If not I'd try the following:

DEVICE=C:\WINDOWS\EMM386.EXE RAM FRAME=E000

And test to see if everything is stable. This alone might get you an extra 64KB of UMBs.

FYI this is the default usage for the upper memory address ranges (in segment values):

  • A000-AFFF: Framebuffer for EGA/VGA/banked SVGA graphics modes. Only available if using a pre-EGA card (CGA, MDA, etc.)
  • B000-B7FF: Memory used for monochromatic modes. Available if using a CGA (always) or EGA+ (if not using monochromatic modes).
  • B800-B7FF: Memory used for color text modes (and CGA graphic modes). Available if using an MDA/Hercules card.
  • C000-CFFF: ROM for EGA/VGA/SVGA cards. Not all graphics cards have 64kB ROMs, many have only 32kB and thus occupies C000-C7FF, leaving C800-CFFF available.
  • D000-EFFF: Addon board will usually put their option ROMs somewhere in this range. Mostly addon cards that allow you to boot from something your BIOS doesn't handle itself. Available in most PCs.
  • F000-FFFF: The computer's BIOS functions.

Reply 11 of 16, by zerker

User metadata
Rank Member
Rank
Member

Thanks for your help, but that config wasn't completely stable. I got a warning from EMM386 "Warning Option ROM detected within the page frame." and some games would refuse to start.

I also tried both reducing and removing EMS memory. Reducing had no effect; the page frame area is always the same size. Using NOEMS however let me use the page frame area (64 kb), which gives me plenty of memory if I don't need EMS.

I can also use either the monochrome video region, or disabling the CD driver if I need more conventional memory while also having EMS memory. Per the memory management thread, I can also try switching my cdrom driver, etc.

Thanks for your help so far, but I don't think I need any more suggestions. I've got the memory I need for the games I'm testing with right now. If I need more, I have options.

Reply 12 of 16, by alexanrs

User metadata
Rank l33t
Rank
l33t

You can always make a boot menu in CONFIG.SYS so you can switch between different configurations without editing the file every time. You could have one with NOEMS and another not loading CD drivers or something like that. Also, are you using MSCDEX+VIDE-CDD.SYS? If so, please be sure to specify the"/E" switch for MSCDEX. That tells it to use EMS instead of relying only on conventional memory.

Reply 13 of 16, by zerker

User metadata
Rank Member
Rank
Member

Yeah, I had a boot menu set up back in the 90s when I was running DOS full time. I have the /E parameter set for MSCDEX, but I'm not (yet) using VIDE-CDD.SYS; still OAKCDROM.SYS for now. I'll swap when I get a chance.

Reply 16 of 16, by Malvineous

User metadata
Rank Oldbie
Rank
Oldbie

Just to explain things a bit, the EMS page frame is a window into the expanded memory. So you could have 32MB of EMS, but a 64KB page frame from E000-EFFF. This lets a program read and write into the 64kB of memory starting at E000 to access up to 64kB of EMS at a time. The program then sends commands to the EMS driver to move the window around, so E000 then contains data from some other part of EMS. This way the program reads and writes lots of memory, but only in 64kB blocks.

To use an analogy, the page frame is like a floppy drive, and EMS is like a stack of floppy disks. You might have 100MB worth of storage in your stack of floppies, but you can only access 1.44MB at a time by sticking one of those disks in the floppy drive. If you stick enough floppies in and out then you can copy across the full 100MB of data, just in blocks of 1.44MB at a time. EMS works the same way, except it's in blocks of 64kB at a time (or whatever the page frame is set to.)

This is the trick of EMS - you can have megabytes of it, but because you're only accessing 64kB of it at a time, it can fit in upper memory where the CPU can see it without going into protected mode.

So of course when you reduce amount of EMS it doesn't affect the page frame, you're just reducing the amount of memory you can see through the window. Just like if you remove some floppy disks from your stack, it doesn't change the fact that you can still store 1.44MB on each disk.

Likewise you can reduce the page frame size without affecting the amount of EMS memory you have, it just means a program can't see as much EMS at the same time - it will have to move the window around more frequently to access the same amount of EMS.

If you're getting errors about an option ROM being in E000 but you don't have anything there, check your BIOS to see if you have any shadow RAM enabled. If your BIOS is set to shadow the E000 region then it will look to the system like there's a ROM there, even if there isn't, because the shadow process makes the memory read-only just like it was a ROM chip.