$D018/53272/VIC+24:   Memory Control Register

   +----------+---------------------------------------------------+
   | Bits 7-4 |   Video Matrix Base Address (inside VIC)          |
   | Bit  3   |   Bitmap-Mode: Select Base Address (inside VIC)   |
   | Bits 3-1 |   Character Dot-Data Base Address (inside VIC)    |
   | Bit  0   |   Unused                                          |
   +----------+---------------------------------------------------+

   Default Value: $14/20 (%00010100).

by Osvald/Resource

Bitmap

$D018 = %xxxx0xxx -> bitmap is at $0000
$D018 = %xxxx1xxx -> bitmap is at $2000

Character memory

$D018 = %xxxx000x -> charmem is at $0000
$D018 = %xxxx001x -> charmem is at $0800
$D018 = %xxxx010x -> charmem is at $1000
$D018 = %xxxx011x -> charmem is at $1800
$D018 = %xxxx100x -> charmem is at $2000
$D018 = %xxxx101x -> charmem is at $2800
$D018 = %xxxx110x -> charmem is at $3000
$D018 = %xxxx111x -> charmem is at $3800

Screen memory

$D018 = %0000xxxx -> screenmem is at $0000
$D018 = %0001xxxx -> screenmem is at $0400
$D018 = %0010xxxx -> screenmem is at $0800
$D018 = %0011xxxx -> screenmem is at $0c00
$D018 = %0100xxxx -> screenmem is at $1000
$D018 = %0101xxxx -> screenmem is at $1400
$D018 = %0110xxxx -> screenmem is at $1800
$D018 = %0111xxxx -> screenmem is at $1c00
$D018 = %1000xxxx -> screenmem is at $2000
$D018 = %1001xxxx -> screenmem is at $2400
$D018 = %1010xxxx -> screenmem is at $2800
$D018 = %1011xxxx -> screenmem is at $2c00
$D018 = %1100xxxx -> screenmem is at $3000
$D018 = %1101xxxx -> screenmem is at $3400
$D018 = %1110xxxx -> screenmem is at $3800
$D018 = %1111xxxx -> screenmem is at $3c00

x means that the value of that bit is irrevelant from the viewpoint of setting the given memory area's address.

Now dont ask me how this mechanism works but there are two memory areas handled differently where for the VIC the character ROM
is mapped in. Unless Ultimax mode is selected by an expansion port cartridge, at these areas the VIC will _always_ 'see' the
char rom instead of the RAM. If you set a sprite/bitmap/screen/character memory to read its data from $1000-$2000 or $9000-$a000
the read will be always done from the character rom. These areas are:

$1000-$2000
$9000-$a000

While the CPU will always handle these areas as RAM, the VIC (once again) will always see the character rom. This was done so
you can use the RAM freely for the CPU, but at the same time the VIC can read its characters without the need to have them stored
in RAM.

Kernal-Reference:

 LDA $D018   : $EB59 $EC48 $EC53
 STA $D018   : $EB5E $EC58