17

I was reading this question, and it sparked an old memory. I had an Amiga 600 a long time ago. And I used to play Secrets of Monkey Island on it, great game. But then I upgraded the computer and installed a hard drive in it. Now Monkey Island claimed there was not enough memory available.

This memory is corroborated by a comment by Jean-François Fabre

you sometimes have to disconnect the second drive if you're short in memory. And sometimes it's not supported by games. But otherwise leave it plugged in – May 28 '20 at 16:19

I've struggling to think why the presence of a hard drive or floppy drive would decrease free memory in an appreciable way. Maybe the underlying kickstarts or whatever allocate buffers and things. But I would suspect that these would be per open file, not per physically present drive.

So why should a hard drive decrease memory available for games and things that don't even need or want the operating system to be running?

19

Let's consider the case of floppies

Floppy drives use DMA to transfer disk data to memory, but there are 2 intermediary steps:

  • The trackdisk device has to read the data as raw data (with error corrections and all). One 0x1600 data track needs twice as much memory for raw data
  • Then it has to decode it into tracks
  • Then the file is extracted from the sectors of those tracks

For a IDE harddisk, the data is already "cooked" (no raw to cooked step is needed), but the file isn't as is on the disk, so some buffers are needed.

So the device cannot just copy cooked data into the user buffer. It needs memory to prepare this data.

If the memory was allocated then freed each time some data needs to be read, the performance will suffer. Besides, the address of those buffers would need to be propagated to all parts of the device that need it (no copy possible).

On a more general point of view, if you want to create a system that is as close as possible as real time, you have to use a static memory model: initialize the memory at startup, then use that memory when the device is operating.

You could write a drive that allocates memory only if a disk is present in the drive and must be read, then frees it when a read is done, but that's not the way the actual devices are designed.

1
  • 1
    It seems obvious now you explained it. Actually I'd guess most systems do the same.
    – OmarL
    Oct 28 at 10:25
24

You use the Amiga DOS ADDBUFFERS command to add (or remove) the configurable buffers for your drives.

ADDBUFFERS adds buffers to the list of buffers available for a drive. Although adding buffers speeds disk access, each additional buffer reduces free memory by approximately 512 bytes. The default buffer allocation is 5 for floppy drives and 30 for hard disk partitions.

Depending on the drive's controller hardware and device driver, these buffers may need to be allocated from CHIP memory. If your hard drive allocates 15 KiB (or more) of CHIP memory, that could be enough to prevent a game from running.

Usually, this is not a problem because Amigas are frequently expanded to add both FAST RAM and a hard drive to the system. The ubiquitous Commodore A2091 Zorro II card, for example, provides both the SCSI interface for the HD and up to 2 MiB of FAST RAM expansion. Therefore you can afford lots of HD buffer space for performance while not impacting CHIP memory available.

1
  • Worth mentioning that the addbuffers command allows negative numbers (at least in the recent versions it did), to reduce the amount of buffers. So it’s possible to counteract the default setting that might have been imposed by the controller.
    – Holger
    Oct 25 at 8:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.