The GeoRAM is a banked memory system.  It uses the registers at
$dffe and $dfff to determine what part of the GeoRAM memory should
be mapped to $de00-$deff.

The register at $dfff selects which 16k block to map, and $dffe
selects a 256-byte page in that block.  Since there are only 64
256-byte pages inside of 16k, the value in $dffe ranges from 0 to
63.  The number of 16k blocks that is available depends on the
size of the GeoRAM/BBGRam:

  512k = 0- 31, $00-$1f
 1024k = 0- 63, $00-$3f
 2048k = 0-127, $00-$7f

The two registers are write-only.  Attempting to read them will
only return random values.  If you need to know the current
values of the registers, you need to write a copy in normal RAM
when you set them.

To convert a basic 24-bit offset into the GeoRAM block/page
format, you need to shift the two upper bits from the middle byte
into the high byte:

.byte temp
.byte banklo,bankmd,bankhi

lda bankmd
sta temp
and #%00111111
sta $dffe

lda bankhi
asl temp
rol
asl temp
rol
sta $dfff

ldx banklo
lda $de00,x

--
White Flame (aka David Holz)
http://fly.to/theflame
