Nostalgia is getting the better of me. I recently bought a Nintendo 64 along with a bunch of the must-have N64 games. And now I'm returning to the good old days of computing when keyboard was king, memory was measured in kilobytes, and plug and pray was wishful thinking.
So... I bought one of the computers I had growing up. A Gateway 2000 486 DX4/100 off E-bay. I've been playing Doom 2 and the original Grand Theft Auto on it, and they're fantastic. :-) The computer came with Windows 95, so I also installed Spaceward Ho.
If you've never played Spaceward Ho, go download it... now... I'll hear back from you in a few days how awesome it is.
Rather than continuing down memory lane, I figured I'd offer some tips for others that are going a bit retro. Computer RAM nowadays is measured in GBs, but in the 90s it was measured in MBs. Worse yet though, on DOS based machines in the 80s/early 90s (before Windows 95), you had to care about the first 1 MB of your memory.
That first MB of memory was divided into conventional and upper memory. (I found a Wiki article that covers it pretty well:
https://en.wikipedia.org/wiki/DOS_memory_management ) Any ordinary application you were going to run needed conventional memory to get going. Even if you had 16 MB of total memory, those apps could easily require 580+ KB of conventional memory (out of 640 KB max). The issue is DOS and all its drivers (mouse, sound card, CD-ROM, etc) needed to be in that first MB of memory as well.
For those young ones out there, that's what "Boot Disks" were for. If you were going to play a certain game, you made a floppy disk the computer booted from for just that game so it only loaded the bare minimum necessary to keep as much conventional memory free to enable the DOS game to run.
I hated that, so I got obsessed with maximizing my conventional memory so I never had to make a boot disk. Things got easier in later DOS versions (memmaker was awesome). But just a couple key things would help:
1. Load as many of your drivers into upper memory as possible (area between 640 KB and 1 MB).
2. Find more efficient drivers that required less memory.
With the DOS command:
mem /c /p
You could see how your memory was being used.
Here's my memory on my new (old) computer after loading as much as I could to upper memory.
My available memory... 587K (601,584 bytes)
With only 1K (1,472 bytes) remaining unused in the upper memory block.
Could be better but not too shabby! I'm sure there are more efficient drivers I could load, but I've reached the conventional memory threshold such that no program should complain it's not enough.
When a DOS based computer boots up, it goes through the CONFIG.SYS then AUTOEXEC.BAT files to load up drivers and any other software that starts automatically. (So much nicer than the hundred ways a nefarious Windows program can sneak its way into starting now.)
My C:\CONFIG.SYS ...
DEVICE=C:\WINDOWS\HIMEM.SYS
DEVICE=C:\WINDOWS\EMM386.EXE RAM
DOS=HIGH,UMB
FILES=40
DEVICEHIGH=C:\WINDOWS\SETVER.EXE
DEVICEHIGH=C:\SB16\DRV\CTSB16.SYS /UNIT=0 /BLASTER=A:220 I:5 D:1 H:5
DEVICEHIGH=C:\SB16\DRV\CTMMSYS.SYS
DEVICEHIGH=C:\SB16\DRV\SBCD.SYS /D:MSCD001 /P:220
HIMEM.SYS is necessary for the computer to access high memory and memory beyond the first 1 MB.
EMM386.EXE provides expanded memory support and access to upper memory for programs. Beyond the first MB of memory, the RAM can be treated as Expanded (EMS) or Extended (XMS). Most programs of the day required EMS rather than XMS, so adding the "RAM" keyword after EMM386.EXE was necessary. Unfortunately it also eats up a lot of upper memory. The alternate keyword is "NOEMS", but then programs that require Expanded memory can't load.
HIMEM.SYS and EMM386 should be at the top; after that you can start taking advantage of your upper memory with DEVICEHIGH.
DOS=HIGH,UMB instructs DOS to load itself into the high memory just above "upper" memory. This always helps free up memory, and I've never seen a downside to it.
FILES=40 allows DOS to have 40 files open simultaneously. I've seen this value as low as 30 and as high as 40.
SETVER.EXE allows you to spoof other DOS versions so you can run older programs. This is tiny and easily fits in upper memory with DEVICEHIGH.
CTSB16.SYS, CTMMSYS.SYS, and SBCD.SYS are all for the sound card and CD-ROM.
My C:\AUTOEXEC.BAT ...
SET SOUND=C:\SB16
SET BLASTER=A220 I5 D1 H5 P330 T6
SET MIDI=SYNTH:1 MAP:E
C:\SB16\DIAGNOSE /S
C:\SB16\MIXERSET /P /Q
LH C:\WINDOWS\COMMAND\MSCDEX.EXE /D:MSCD001 /V /M:15 /E
C:\MOUSE\CTMOUSE.EXE
@ECHO OFF
PROMPT $p$g
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\DOS
SET TEMP=C:\DOS
The SET command defines DOS environment variables so programs later can know how the computer is configured. As you can see in my setup, mine are mostly for the sound card.
MSCDEX.EXE gets the CD-ROM going.
CTMOUSE.EXE are mouse drivers from the FreeDOS project.
@ECHO OFF is just used to hide the following commands so startup looks cleaner.
PROMPT $p$g gives you the classic C:\ look.
PATH is very handy to set what folders DOS should look in whenever you type something into the prompt. I could create a new folder called C:\UTILITY and put a bunch of executable files in there to help me manage my computer. Rather than explicitly typing C:\UTILITY\PROGRAM.EXE each time I wanted to execute one, I just add C:\UTILITY to my PATH. Then I can type "PROGRAM.EXE" from any folder and it would execute it.
Computers with Windows 95 could actually boot straight to DOS. From there you could start Windows by typing "win". Since the vast majority of the programs I'm running on this computer are DOS based, I modified the C:\MSDOS.SYS file to always boot directly to DOS.
Just needed to change BootGUI=1 to BootGUI=0
This is what the computer starts up to!
So far I've just been transferring files to and from the computer via a 3.5" floppy and CD-ROM. However, I want something more sustainable long term. Although these old computers don't have USB, this time period was the high point of serial communication ports so support there is ready to go.
I purchased a USB->COM port adapter for my modern computer.
To physically connect the computers, I ended up with the old computer connected to a 9-pin serial cable connected to a "Null Modem" adapter (which reverses the transmit and receive wires) connected to a gender change connected to the USB->COM adapter connected to the modern computer.
(You can buy a single USB->Null Modem Serial cable that literally encompasses everything above, but I already had all the other components and I like the flexibility.)
My USB->COM adapter reported in Windows as COM3.
So I started PuTTY on the modern computer and configured it for COM3
Next I opened QBasic 4.5 on the old computer (yes, I still have my original 3.5" install disks and manual) and loaded the example TERMINAL.BAS program.
My serial cable was connected to COM1 on the old computer so that was fine in the example, but I did increase the baud rate from 1200 to 9600.
Finally I ran the TERMINAL.BAS program on the old computer and opened the connection in PuTTY on the new!
We have 2-way communication!
Now that I have this connection made, there are many solutions out there for transferring files over the serial cable. I may make my own approach; we'll see how it goes. :-)
On a lighter note, when I opened the CD-ROM drive on the computer, the seller had put an AOL CD in there. Freaking awesome! For anyone that owned a computer in the 90s, you know what's up with that.
Side thing you don't care about but I want recorded on the Internet so it will be easy for me to lookup later: You press F1 to bring up the BIOS on this Gateway computer. F1!? Right!? Not delete. Not F2. F1! Does it tell you F1 enters the BIOS at bootup? Of course not.