UltiMem

From DenialWIKI
Jump to navigation Jump to search

Introduction

8 megabytes FLASH-ROM and 1 megabyte configurable RAM-expansion cartridge

Getting started

The right button on the UltiMem will perform a RESET, if you want to go to BASIC just hold the middle button while pushing the right button. When you receive the UltiMem it will be pre-loaded with just one game that autostarts. You can flash different contents to it, however these are still very much work-in-progress.

If you want to use the UltiMem as a simple RAM-expansion reset to BASIC and then type:

Command Expansion Memory-areas
POKE 40945,63:POKE 40946,255:POKE 40944,64 37K RAM1/2/3 ($0400-$0fff), BLK1 ($2000-$3fff), BLK2 ($4000-$5fff), BLK3 ($6000-$7fff), BLK5 ($a000-$bfff), IO2/3 ($9800-$9fff)
POKE 40945,3:POKE 40946,255:POKE 40944,64 35K RAM1/2/3 ($0400-$0fff), BLK1 ($2000-$3fff), BLK2 ($4000-$5fff), BLK3 ($6000-$7fff), BLK5 ($a000-$bfff)
POKE 40945,0:POKE 40946,255:POKE 40944,64 32K BLK1 ($2000-$3fff), BLK2 ($4000-$5fff), BLK3 ($6000-$7fff), BLK5 ($a000-$bfff)
POKE 40945,3:POKE 40946,0:POKE 40944,64 3K RAM1/2/3 ($0400-$0fff)
POKE 40945,0:POKE 40946,0:POKE 40944,64 unexpanded

You can flash an image to the UltiMem that provides these options on power-up/reset: http://sleepingelephant.com/ipw-web/bulletin/bb/viewtopic.php?f=15&t=7787#p87471

FLASH-images

http://www.go4retro.com/downloads/UltiMem/ This is the (more or less) official image for the UltiMem provided by Jim Brain on his webpage. It contains a large collection of games and applications, including a lot of cartridge-images. Just copy "flash4file" and "ultimem.bin" on a device accessible from the VIC-20, plug in your UltiMem, reset to BASIC and LOAD an RUN "flash4file".

http://sleepingelephant.com/ipw-web/bulletin/bb/viewtopic.php?f=15&t=7787#p87471 This image provides a menu for choosing a RAM-expansion-option. It offers more memory-options than the official image (like 32K and 35K which you need for some games like Popeye or Doom). It also provides the option of installing SJLOAD in memory, which provides faster load-times for Jiffy-enabled devices like the SD2IEC.

Purchase

http://store.go4retro.com/ultimem-vic-20-memory-expansion-cartridge/

Technical Details

Ultimem supports additional memory as 8 kilobyte “banks” that can independently mapped into the following areas of the Commodore VIC-20 memory map:

  • RAM1/2/3
  • BLK1
  • BLK2
  • BLK3
  • BLK5
  • IO2/IO3

The Ultimem configuration registers are located at the top of the IO3 address space ($9ff0)[40944] and comprise 16 registers with the following definitions:

  1. CONTROL ($9ff0)[40944]
    • bit0: LED (1 = on)
    • bit1: switch0 (read only, 0 = pressed)
      • (switch 0 is the middle switch on Ultimem, and the rightmost top mounted switch on VIC-MIDI as viewed while installed in the VIC-20)
    • bit2: switch1 (read only, 0 = pressed)
      • (switch 1 is the left-most switch on Ultimem and VIC-MIDI, as viewed while installed in a VIC-20)
    • bit6: soft reset (1 = reset VIC, but keep register values)
    • bit7: hide registers (1 = hide registers)
  2. MEM_CONFIG1 ($9ff1)[40945]
    • bit0/1: RAM1/2/3 config
      • 00: no ram or rom
      • 01: FLASH ROM
      • 10: RAM (RO)
      • 11: RAM (R/W)
    • bit 2/3: IO2 config
    • bit 4/5: IO3 config
  3. MEM_CONFIG2 ($9ff2)[40946]
    • bit 0/1: BLK1 config
    • bit 2/3: BLK2 config
    • bit 4/5: BLK3 config
    • bit 6/7: BLK5 config
  4. ID ($9ff3)[40947]
    • bit0-3: Cartridge Type
      • $1: ULTIMEM
      • $2: VIC-MIDI
    • bit 4-7: Cartridge Manufacturer
      • $1: RETRO Innovations
  5. RAM_BANK ($9ff4/5)[40948/9]
    • Default Value: 1
    • Bank is stored in low byte/high byte order
  6. IO_BANK ($9ff6/7)[40950/1]
    • Default Value: 2
  7. BLK1_BANK ($9ff8/9)[40952/3]
    • Default Value: 3
  8. BLK2_BANK ($9ffa/b)[40954/5]
    • Default Value: 4
  9. BLK3_BANK($9ffc/d)[40956/7]
    • Default Value: 5
  10. BLK5_BANK($9ffe/f)[40958/9]
    • Default Value: 0

Notes:

  • RAM1,2,3 can only be enabled/disabled/configured as 1 group of locations. If you want RAM at RAM1, you’ll get it at RAM2 and 3 as well
  • IO2/3 can be independently enabled/disabled, but must map to the same area of memory. If you have RAM at IO2 and IO3, they will both map to the same RAM bank in UltiMem
  • Memory is mapped on 8kB boundaries at all times. Thus, if memory is mapped to RAM1,2,3 or IO2,IO3, the first memory location stored in UltiMem memory will be at the 8kB based offset of the VIC-20 memory location. For example. If IO2 ($9800) is mapped to a RAM bank, a write to $9800 will be stored at offset $1800 in the RAM bank. Normally, this is of no interest, unless you move the RAM bank. If you store data in a bank of data mapped to $9800 and then map it to BLK1 ($2000), the data will be read from $3800 ($2000 base address + $1800). You can use this to your advantage by mapping RAM1,2,3 and IO2/3 to the same bank of RAM or ROM, as none of them overlap within the 8kB address space ($0400), ($0800), ($0c00), ($1800), ($1c00)
  • If RAM or FLASH ROM is placed under the Ultimem registers, the registers will override the RAM or FLASH ROM values at those locations, unless the registers are hidden using bit 7 of the CONTROL register.
  • The LED and switches are for user usage.
  • On boot, BLK5 is set to FLASH ROM bank 0. All other banks are disabled
  • On boot and reset, holding down switch0 will disable BLK5 FLASH ROM visibility
  • On reset, bank registers are set to the following values (RAM = 1, IO = 2, BLK1 = 3, BLK2= 4, BLK3 = 5, BLK5 = 0). This is done to ensure that BLK5 will point to the first bank of memory, and that if someone turn on all RAM, the banks will not collide.
  • After hiding the registers, one can re-enable them by reading $9f55,$9faa, and then $9f01. Thus, to check for Ultimem capability, one should read from the 3 locations, and then read the ID register.
  • Do not assume RAM size. Perform a RAM test
  • Do not assume FLASH ROM size. FLASH ROM ICs can be queried for size and capabilities.

Support

Project Files

Frequently Asked Questions

Q: Why does my image not work? A: Maybe it has copy protection. Make sure you configure the memory-area for such images on your UltiMem as ROM or read-only RAM

Usage Examples

  • To enable all memory, store 63 in MEM_CONFIG1 and 255 and MEM_CONFIG2 and then store 64 into CONTROL. This will reset the machine with all RAM enabled