*) The hardware supports a RAM extension but this is not emulated due to lack of software.
The following figure shows the Eurocom II/V7 has 64 KByte RAM, organized as
1 x 64 KByte RAM. 4 KByte out of it are mapped to an EPROM. The EPROM contains
the monitor program:
RAM Extension [KByte] | Organized |
---|---|
96 | 6 x 16 KByte |
384 (288 *) | 6 x 64 KByte |
A RAM extension can be used to extend the main RAM, as video RAM, or as RAM disk. The MC6809 only supports an address range of 64 KByte, so a Memory Management unit (MMU) is used to map parts of the RAM extension into the available address range.
The MMU of the 384 KByte RAM extension is not very flexible as will be described later in the chapter describing the MMU which means that the upper 16 KByte of each RAM bank is only accessible under some restrictions. This is the reason why ELTEC promoted it only as a 288 KByte RAM extension. This limitations have been overcome with a hardware modification as will be described in the chapter for flexible MMU.
RAM bank | Bank identifier |
---|---|
6 x 16 KByte | $0C, $0D, $0E, $04, $05, $06 |
6 x 16 KByte | $08, $09, $0A, $00, $01, $02 |
RAM bank | Bank identifier |
---|---|
6 x 64 KByte | $0C, $0D, $0E, $04, $05, $06 |
6 x 64 KByte | $08, $09, $0A, $00, $01, $02 |
MMU register | Target address range |
---|---|
$FFEF | $F000 - $FFFF |
$FFEE | $E000 - $EFFF |
$FFED | $D000 - $DFFF |
$FFEC | $C000 - $CFFF |
$FFEB | $B000 - $BFFF |
$FFEA | $A000 - $AFFF |
$FFE9 | $9000 - $9FFF |
$FFE8 | $8000 - $8FFF |
$FFE7 | $7000 - $7FFF |
$FFE6 | $6000 - $6FFF |
$FFE5 | $5000 - $5FFF |
$FFE4 | $4000 - $4FFF |
$FFE3 | $3000 - $3FFF |
$FFE2 | $2000 - $2FFF |
$FFE1 | $1000 - $1FFF |
$FFE0 | $0000 - $0FFF |
The RAM bank and source address range which is mapped is specified by the RAM bank identifier.
Example: When writing $0C into MMU register $FFE4 4 KByte RAM of RAM bank $0C is mapped into the target address range $4000 - $4FFF.
Which source address range is used depends on the RAM extension type: A 96 KByte RAM bank only has 16 KByte (address range $0000 - $3FFF). So in this example the address range of $0000 - $0FFF is mapped. For 384 KByte RAM bank the source address range is always the same as the target address range. The blue arrows in the figures show by example which (blue marked) source address ranges can be mapped to which (also blue) target address ranges.
When writing $03, $07, $0B or $0F into any MMU register it's previous mapping is removed. Also the monitor program uses the MMU. To know the current state of all MMU registers the monitor program saves a copy of them into the address location $EFE0 - $EFEF. When writing to a MMU register the upper four bits should always be 0.
MMU register value | Target address range |
---|---|
$0X | $0000 - $3FFF |
$1X | $4000 - $7FFF |
$2X | $8000 - $BFFF |
$3X | $C000 - $FFFF |
Example: When writing $2C into MMU register $FFE4 4 KByte RAM of RAM bank $0C is mapped into the target address range $8000 - $8FFF.
When writing to a flexible MMU register the upper two bits should always be 0.
Address | Content |
---|---|
$FD00 | Seconds ($00-$3B) |
$FD01 | Seconds Alarm ($00-$3B) |
$FD02 | Minutes ($00-$3B) |
$FD03 | Minutes Alarm ($00-$3B) |
$FD04 | Hours ($00-$17) |
$FD05 | Hours Alarm ($00-$17) |
$FD06 | Day of Week ($01-$07, Sunday=1) |
$FD07 | Date of Month ($01-$1F) |
$FD08 | Month ($01-$12) |
$FD09 | Year ($00-$63) |
$FD0A | Register A |
$FD0B | Register B |
$FD0C | Register C |
$FD0D | Register D |
$FD0E - $FD2F | User RAM |
For more details see MC146818 data sheet.
VICO1 register value | Video address range |
---|---|
$00 | $0000 - $3FFF |
$01 | $4000 - $7FFF |
$02 | $8000 - $BFFF |
$03 | No video RAM |
VICO1 is a write-only register. When reading it always returns $FF. Only bit 0 and 1 select the video RAM segment. Bit 7 up to bit 2 should always be written as 0.
VICO1 register value | Video address range |
---|---|
$00 | $0C, $0D, $0E, $04, $05, $06 |
$01 | $08, $09, $0A, $00, $01, $02 |
Only bit 0 select the video RAM segment. Bit 7 up to bit 1 should always be written as 0.
When choosing 2, 8 or 64 colors the RAM banks are used as color planes:
bank identifier value | Colors | Video address range |
---|---|---|
$0C, $08 | 2,8,64 | Green low |
$0D, $09 | 8,64 | Blue low |
$0E, $0A | 8,64 | Red low |
$04, $00 | 64 | Green high |
$05, $01 | 64 | Blue high |
$06, $02 | 64 | Red high |